Bash:查找和替换文本字符串

Bash:查找和替换文本字符串

我认为这很容易,但我忽略了一些简单的事情:

我有一个名为 的文本文件test。例如,它包含字符串Alfred Hitchcock。我想将其替换为Alfred\ Hitchcock

我想这可以做到:

grep -r1 ' ' /path/to/test | xargs sed -i 's/ /\ /g'

但它告诉我:

sed: can't read Alfred: No such file or directory
sed: can't read Hitchcock: No such file or directory

不太清楚发生了什么。任何帮助都非常感谢。

答案1

grep你根本不需要:

sed -i 's/ /\ /g' /path/to/test

这将转义文件中的所有空格。如果只转义某些字符串,请参阅 Guru 的答案。

现在,如果您想对给定目录中包含空格字符的所有文件执行此操作:

grep -rl ' ' /path/to/test/dir | xargs sed -i 's/ /\ /g'

现在我意识到,这和你的命令行是一样的,除了后面的字符-r,应该是小写的L

(注:我假设正在使用 GNU 工具。)

答案2

单程:

sed -i 's/Alfred Hitchcock/Alfred\\ Hitchcock/' /path/to/test

答案3

尝试单独执行 grep 命令来查看发生了什么。

它将打印类似

/path/to/test/test:Alfred Hitchcock

当将其传递给 xargs 时,它将尝试执行

sed -i 's/ /\ /g' /path/to/test/test:Alfred
sed -i 's/ /\ /g' Hitchcock

相关内容