Bash替换特定条件为真的字符串

时间:2013-12-18 17:20:44

标签: bash shell replace sed

我正在尝试在同一行中替换特定条件为true的字符串

我有一些包含某些行的文件。我用另一个单词(word3)开头的每一行替换一个单词(word1)和另一个单词(word2)

例如:

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)

2 个答案:

答案 0 :(得分:7)

这是非常基本的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'something替换replacement个字符串。 g表示每次都可以完成。
  • 添加/^foo/只会考虑以foo开头的行。
  • 如果您希望对文件进行编辑,即通过替换更新文件内容,请添加-ised -i.bak '/^foo/s/see/raa/g' filefile.bak将包含上一个文件。

更新

  

如何使用变量代替foo,请参阅,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

等等。

答案 1 :(得分:3)

我知道它要求sed,但如果他们愿意,可以发布awk给其他人阅读。

awk '/^foo/ {sub(/see/,"raa")}1' file