0

行を調べて一致させるsed式を作成するにはどうすればよいですか

Id int

そしてに変更

Id string

これはその行の唯一のコンテンツ (Id int 以外は何もない) であり、他の行を変更してはなりません。

私は線に沿って何かを試しました

find . -type f -print0 | xargs -0  sed -i '' 's~^\([[:space:]]*\)"Id"[[:space:]]*"int"[:space:]]*$~\1"Id string"~g'

しかし、正規表現は間違っています。

ありがとう。

編集:

さらに明確にするために: の前Id、 と の間にスペース (矛盾) がIdありintます。したがって、タブや式の代わりに [[:space:]]* に一致する必要がありますs/^Id int$

一致する行は次のようになります

   Id int
Id   int
  Id      int

で置き換えることができます

Id string
Id string
Id string

つまり、スペースの数を保持する必要はありません

4

2 に答える 2

0

awk で簡単に:

awk '$2=="int"{$2="string"}1'

また、実際のニーズに合わせて微調整するのが簡単になる可能性があります。

于 2013-11-05T04:26:13.157 に答える
0

私は次のことがあなたが望むことをすると信じています:

sed 's/^Id int$/Id string'

は行の開始を^意味し、行の終了を意味するため、変更を のような行を含まない行のみに制限します。$Id intI like Id int

次の OP の説明を更新します。

さまざまな空白がある場合に一致させ、この空白を保持したい場合は、次を使用できます。

sed 's/^\([[:space:]]*\)Id\([[:space:]]+\)int\([[:space:]]*\)$/\1Id\2string\3/'

これにより、 の前、とIdの間、 の後の空白が保持されます。単語間または最後の単語の後の空白を保持したくない場合は、グループ一致パラメーターを式から削除します。Idintint\2\3sed

于 2013-11-05T03:42:06.313 に答える