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

Con*_*lor 2 bash grep sed bash-scripting

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

我有一个名为test. 例如,它包含字符串Alfred Hitchcock。我想用Alfred\ Hitchcock.

我想这会做到:

grep -r1 ' ' /path/to/test | xargs sed -i 's/ /\ /g'
Run Code Online (Sandbox Code Playgroud)

但它告诉我:

sed: can't read Alfred: No such file or directory
sed: can't read Hitchcock: No such file or directory
Run Code Online (Sandbox Code Playgroud)

不太确定发生了什么。任何帮助都会很棒,谢谢。

Alu*_* G. 7

你根本不需要grep

sed -i 's/ /\ /g' /path/to/test
Run Code Online (Sandbox Code Playgroud)

这将转义文件中的所有空格。要仅在某些字符串上转义,请参阅 Guru 的回答。

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

grep -rl ' ' /path/to/test/dir | xargs sed -i 's/ /\ /g'
Run Code Online (Sandbox Code Playgroud)

现在我意识到,这与您的命令行相同,除了 之后的字符-r,它应该是小写的L

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