基本上,我运行了这个:
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
。
要做三件事:
- 由于您不太可能故意
cap_infos/icap_servers/g
在其中包含仅包含的行,因此您可以使用删除它们sed '/^cap_infos\/icap_servers\/g$/d'
(再次,您地址删除什么d
) - 进行预期的改变
-i
学习在将来使用选项之前始终检查更改