2013-05-15 46 views
2

我都喜歡追加行之後還有比賽中的Unix shell腳本2模式

nithin shetty 
sachin shetty 
pavan 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 

是否有可能?

+1

是文件中的反引號真的嗎? – ikegami

回答

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

  • 線會從指定的文件(S)或從標準輸入讀取,如果沒有文件被命名。
  • 輸出將被髮送到標準輸出。
  • 您可以使用-i進行就地編輯。
+0

非常感謝你.. – Tingrammer

3

sed一個解決方案將是以下形式:

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

b會導致SED分支到在不存在標籤的腳本的末尾。

+0

非常感謝你... – Tingrammer

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