我认为这很容易,但我忽略了一些简单的事情:
我有一个名为 的文本文件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