运行了错误的 sed 命令。所有源代码文件都乱了

运行了错误的 sed 命令。所有源代码文件都乱了

基本上,我运行了这个:

sed -i '/s/icap_infos/icap_servers/g' *

而不是这个:

sed -i 's/icap_infos/icap_servers/g' *

注意到命令中“s”之前的前导斜杠了吗?

现在我的所有源文件都有一个奇怪的文本字符串分散在整个文件中。我该如何解决?

答案1

/s/是匹配任何包含字符的行的正则表达式地址s。在 GNU sed 中,itext是标准的扩展

i\
text

text在指定行之后插入。因此,您的命令cap_infos/icap_servers/g在任何包含s.

假设您的原始文件不包含此类文件,您应该能够使用

sed -i.old '\:^cap_infos/icap_servers/g$:d' *

delete 行cap_infos/icap_servers/g完全匹配。请注意备用分隔符:(由 引入)的使用,\:因为模式本身包含默认分隔符/。当前文件将使用后缀进行备份,.old以防它不起作用并且您需要尝试不同的东西。

将来养成空运行 sed 命令的习惯没有 -i首先和/或使用-i.bak而不是普通的进行备份-i

答案2

/s/解释为地址,因此下一个命令将仅适用于包含s.下一个命令是i,插入以下文本,即cap_infos/icap_servers/g

要做三件事:

  1. 由于您不太可能故意cap_infos/icap_servers/g在其中包含仅包含的行,因此您可以使用删除它们sed '/^cap_infos\/icap_servers\/g$/d'(再次,您地址删除什么d
  2. 进行预期的改变
  3. -i学习在将来使用选项之前始终检查更改

相关内容