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,

  • 如果没有命名文件,将从指定文件或标准输入中读取行。
  • 输出将被发送到标准输出。
  • 您可以-i用于就地编辑。
于 2013-05-15T04:14:50.877 回答
0

这是一种方法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 回答