2016-03-29 52 views
0

我有這個MYFILE用線:SED替代條件滿足後,才

dog 
snake 
dog 
cat 
dog  
snake 
python 
cat 
dog 
cat 
dog 

這將替換所有的狗,獅子 SED -i 'S /狗/獅/ G'

,但我想要在文件中遇到第一個「貓」後才進行更換,以便具有

dog 
snake 
dog 
cat 
lion  
snake 
python 
cat 
lion 
cat 
lion 

我該怎麼做? 請注意,我不知道在哪一行中第一個「貓」是先驗的。我一定要找到第一貓,然後從那裏

回答

3

使用range address應用SED:

sed '/cat/,$s/dog/lion/' a.txt 

在這種情況下,範圍開始在cat第一次出現在輸入結束時結束,用/cat/,$表示。

翻譯 sed解決 awk

$ awk '/cat/,0{sub("dog","lion")}1' file 

說明

0

/cat/,0從貓到文件結尾的

sub("dog","lion")獅代替狗

1打印

0

一個附加選項來處理doglion只有前行cat是:

sed "/cat/{N;s/dog/lion/;}" 

例如,您的數據文件保存爲file.txt

$ sed "/cat/{N;s/dog/lion/;}" file.txt 
dog 
snake 
dog 
cat 
lion 
snake 
python 
cat 
lion 
cat 
lion