2014-04-16 54 views
0

我在文件中使用sed命令進行替換。 假設我的文件1是:替代選項:在sed命令中

10 
11 
10 
11 

然後我想替換一號「10」,在文件1至「12」,並轉儲到file2。該文件2應該是:

12 
11 
10 
11 

我試過這個命令:

sed 's/10/12/' file1 >file2 

但它改變了第二屆 「10」 也。那麼,我如何編寫sed命令來做到這一點?

回答

1

如果你可以用awk,而不是sed的,你可以有更多的控制是這樣的:

awk '!changed && /10/ { sub(/10/, "12"); changed = 1}1' file1 
12 
11 
10 
11 
1

嘗試:

sed '0,/10/s/10/12/' file1 >file2 
+1

這將完成這項工作,但你應該解釋它做了什麼以及爲什麼它完成了工作。 –

1

像格里芬說,你可以做這樣的事情:

sed '0,/10/ s/10/12/' file1 > file2 

0,/10/開始設置下列替換命令的邊界。它表示從第0行(第一行)開始,直到它匹配模式/10/。所以在第一場比賽之後,sed將停止處理該替換。

+0

'0,/ ... /'只是GNU sed – Scrutinizer

1

如果你沒有GNU sed,嘗試:

echo | cat - file | sed '1,/10/s/10/12/; 1d' 

sed '1,/10/s/10/12/; 1d' << EOF 

$(cat file) 
EOF 

bash/ksh93

sed '1,/10/s/10/12/; 1d' <(echo; cat file) 

GNU SED知道0,/10/所以多餘的空行不需要