【问题标题】:unix find and replace characters with strings for multiple charactersunix用多个字符的字符串查找和替换字符
【发布时间】:2013-05-17 00:18:41
【问题描述】:

我想用单词替换文件中所有出现的某些字符。我的问题是,我可以使用单个命令对所有字符执行此操作吗?我正在使用以下命令将每次出现的 'a' 替换为 'apples'

sed 's/a/apple/g' sample.txt 

我不想编写 3 或 4 个类似的命令来用一些单词替换每次出现的 'b'、'c'、'd'。有什么办法可以扩展上述命令以满足我的需要,还是我需要使用相同的 3 次?

【问题讨论】:

  • 在替换e 字符时要小心,因为它也会影响apple 中的e。您可能需要研究 sed 的正则表达式功能,尤其是“单词边界”字符。
  • @Intermernet 在这种情况下你建议我做什么?我还注意到,使用我提到的命令,我在终端中得到了一个替换的输出,但文件内容没有被修改。
  • 查看sed -i。它应该允许就地修改,但有时很危险!先复制文件!

标签: linux shell unix ubuntu command-line


【解决方案1】:

您可以在 sed 中使用-e 开关输入多个命令,如下所示:

sed -i.bak -e 's/a/apple/g' -e 's/b/bat/g' -e 's/c/cat/g'

【讨论】:

  • 这听起来不错。但它实际上是修改文件的内容还是只是在终端上显示它?为我使用 sed 命令只是在终端中显示更改,但是当我打开文件时,我看到旧的未修改内容
  • 我已添加-i.bak 标志以启用内联编辑,这将保存文件本身的更改。
  • 这非常有效。但是,.bak 是否用作备份文件?如果是这样,它什么时候真正有用?我不能简单地使用 sed -i -e 's/a/apple/g' 等等吗?
  • .bak 保留文件的原始内容,这是出于安全考虑,如果出现任何问题,您可以获取原始文件。
  • 我明白了。现在我明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 2015-03-15
  • 2011-08-22
相关资源
最近更新 更多