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

标签 bash shell replace sed

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

我有一个包含几行的文件。我在以另一个词 (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/

相关文章:

php - 带参数的 openvpn-install 脚本

javascript - 使用 Node.js 创建可滚动/可重写的终端/stdout 接口(interface)

bash - 如何使用SSH客户端在远程主机上运行本地代码?

javascript - 在字符串中查找部分但替换整个大小写正则表达式?

linux - 通过 shell 脚本实现自动化

regex - 如何在 bash 中获取变量配置的值?

regex - 我可以在 bash shell 脚本中使用正则表达式吗

c# - 正则表达式替换 : Transform pattern with a custom function

python - Pandas Dataframe 根据长度替换字符串

bash - 在 bash 中,我如何添加带前导零的整数并维护指定的缓冲区