我有几个目录和子目录包含文本文件。我需要为所有目录和子目录更改这些文本文件的特定行。我使用以下 sed 命令执行此任务;
find ./ -type f -exec sed -i -e 's/old_line/new_line/g' {} \;
如果 old_line 和 new_line 中没有空格,则此方法有效。但对于以下示例,此方法无效;
old_line=5704550660 SPP91564_2 ANT # / TYPE
new_line=5704550660 SPP91564_2 NONE ANT # / TYPE
当我在上面的 sed 命令中附加这些行时,我收到;
sed: -e expression #1, char 56: unknown option to `s'
我如何修改上述命令,使上述示例能够正常工作?
答案1
造成问题的不是空格,而是/
文本中的。您的命令显示:sed 's/570455066 .../ TYPE/5704550660.../ TYPE/g'
- 您看到问题了吗?您需要使用其他字符作为分隔符,该字符不会出现在替换文本中,例如:
sed 's:5704550660 SPP91564_2 ANT # / TYPE:5704550660 SPP91564_2 NONE ANT # / TYPE:g'
您也可以使用/
反斜杠在文本中转义:\/
。