我做一個查找和使用sed替換,與BASH變量$b
更換BASH變量$a
(在新行的開始時):更換比賽的第一次出現使用sed
sed -i "s#^$a#$b#" ./file.txt
這將替換^$a
的所有匹配項。我怎樣才能在整個文件中只替換^a
的第一次出現?
我做一個查找和使用sed替換,與BASH變量$b
更換BASH變量$a
(在新行的開始時):更換比賽的第一次出現使用sed
sed -i "s#^$a#$b#" ./file.txt
這將替換^$a
的所有匹配項。我怎樣才能在整個文件中只替換^a
的第一次出現?
此閱讀更多有關這可能爲你工作:
sed -i 'x;/^./{x;b};x;/^'"$a"'/{s//'"$b"'/;h}' file
或者:
sed -i ':a;$!{N;ba};s/^'"$a/$b"'/m' file
一你的方式唱sed
:
sed "s/^$var1/$var2/ ; ta ; b ; :a ; N ; ba" infile
說明:
s/^$var1/$var2/ # Do substitution.
ta # If substitution succeed, go to label `:a`
b # Substitution failed. I still haven't found first line to
# change, so read next line and try again.
:a # Label 'a'
N # At this position, the substitution has been made, so begin loop
# where I will read every line and print until end of file.
ba # Go to label 'a' and repeat the loop until end of file.
與由Jaypal提供相同的例子的試驗:
含量infile
:
ab aa
ab ff
baba aa
ab fff
運行命令:
sed "s/^$var1/$var2/ ; ta ; b ; :a ; N ; ba" infile
而且結果:
bb aa
ab ff
baba aa
ab fff
我使用GNU sed的版本4.2.1。 – Village 2012-02-05 03:15:45