2016-05-23 6 views
0

文字列の最後の数字を変更するためにsed構文を組み合わせるのが難しいです:<FITID>1261703816 変更が必要なフィールドがいくつかあるファイルがあります文字列の数値部分は常に異なっています。ただし、数字の量は常に同じです(10)。基本的には、最後の文字を<FITID>1261703816に変更する必要があります。<FITID>1261703817には、数百個のフィールドが含まれています。パターンのN番目の文字を変更するためにSedを使用する必要があります

+1

もし 'sed '/.$/ 7 /''があなたの望むことをしていないならば、あなたの質問を明確にし、より現実的で本当に代表的なサンプル入出力を提供してください。 –

答えて

1

このコマンドは7<FITID>後に第十の桁を変更します:

sed -E 's/([<]FITID[>][[:digit:]]{9})[[:digit:]]/\17/g' file 

例えば:

$ cat file 
words, words, <FITID>1261703816 and more words 
$ sed -E 's/([<]FITID[>][[:digit:]]{9})[[:digit:]]/\17/g' file 
words, words, <FITID>1261703817 and more words 

これはただ一つの代替コマンドが必要です。 [<]FITID[>]<FITID>と一致します。山括弧は大括弧で囲まれています。 [[:digit:]]{9}は9桁に一致します。我々はユニコードで安全なので0-9の代わりに[:digit:]を使用します。これらの文字はすべて親の(...)に入れられているため、置換テキストではグループ\1として参照できます。

+0

これはMacまたはBSDシステムで動作します。 GNU 'sed'をお持ちの場合は、' -E'の代わりに '-r'が必要です。 –

+1

@JonathanLeffler GNU sedも '-E'をサポートしています(shh - それは秘密です!)。 –

+0

@エドモトン:はい。あなたは正しい。それは 'sed --help'が宣伝するものではない。残念。それはすべての騒ぎなしで仕事をより多くの場所で動作させる簡単な方法があることを意味します。 –

関連する問題