我正在尝试替换同一行中特定条件为真的字符串
我有一个包含几行的文件。我在以另一个词 (word3) 开头的每一行中用另一个词 (word2) 替换一个词 (word1)
例如:
foo moo see
kaa haa qee
foo dee see
uuu ooo rrr
foo dee laa
我想在以“foo”开头的每一行中用“raa”替换单词“see”。这样做会导致行如下:
foo moo raa
kaa haa qee
foo dee raa
uuu ooo rrr
foo dee laa
有人告诉我可以使用 sed 来做到这一点,但我不知道该怎么做。
求助! (仅限 sed)
最佳答案
这是非常基本的 sed
:
$ sed '/^foo/s/see/raa/g' file
foo moo raa
kaa haa qee
foo dee raa
uuu ooo rrr
foo dee laa
说明
sed 's/something/replacement/g'
用replacement
替换something
字符串。g
表示每次都可以完成。- 添加
/^foo/
使其只考虑以foo
开头的行。 - 如果您希望就地编辑文件,即用替换更新文件内容,请添加
-i
:sed -i.bak '/^foo/s/see/raa/g' 文件
。file.bak
将包含之前的文件。
更新
How to use variables instead of foo, see, raa ? – Khaleal
像这样加双引号:
$ d="foo"
$ e="see"
$ sed "/^$d/s/$e/raa/g" file
foo moo raa
kaa haa qee
foo dee raa
uuu ooo rrr
foo dee laa
等等。
关于Bash 替换特定条件为真的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20664446/