2

次のようなファイルがあります

nithin shetty
sachin shetty
pavan shetty

このファイルでは、パターン「shetty」の次の行に「HELLO THIS IS ME」を追加します。ただし、条件は、行が "nithin" に一致する場合、その行を追加しないことです。パターンマッチの後に行を追加する方法を知っています。

sed '/shetty/a\
  HELLO THIS IS ME
' filename`

しかし、これでは、を含む行は必要ありませんnithin。出力は次のようになります。

nithin shetty
sachin shetty
  HELLO THIS IS ME
pavan shetty
  HELLO THIS IS ME

出来ますか??

4

3 に答える 3

3

解決策は次のsed形式になります。

sed '/nithin/b; /shetty/a\ HELLO THIS IS ME' filename

bラベルがない場合、sed はスクリプトの最後に分岐します。

于 2013-05-15T04:18:49.340 に答える
2

申し訳ありませんが、わかりませんがsed、Perl は知っています。

perl -nE'print; say "HELLO THIS IS ME" if /shetty/ && !/nithin/'

また

perl -pe'$_ .= "HELLO THIS IS ME\n" if /shetty/ && !/nithin/'

のようにsed

  • 行は、指定されたファイルから、またはファイルが指定されていない場合は stdin から読み取られます。
  • 出力は stdout に送信されます。
  • -iインプレース編集に使用できます。
于 2013-05-15T04:14:50.877 に答える
0

これを行う1つの方法は次のawkとおりです。

awk '!/nithin/ && /shetty/ { $0 = $0 "\n  HELLO THIS IS ME" } 1' infile

出力:

nithin shetty
sachin shetty
  HELLO THIS IS ME
pavan shetty
  HELLO THIS IS ME
于 2013-05-15T06:55:25.793 に答える