使用sed如何将空格替换为\(space)?

14

当我使用sed命令将所有空格替换为X时,命令有效,具体命令如下:

sed 's/ /X/g'
sed 's/ /X/g' filelist.tmp

然而,当我尝试使用相同的方法将所有空格替换为 \space 时,代码如下:

sed 's/ /\ /g' filelist.tmp

它不能工作。我做错了什么?请注意我是shell脚本的新手。

2个回答

20

加入另一个\,即需要使\成为文字符号:

sed 's/ /\\ /g'

只有一个\在空格前面,这个\是用来转义后面的空格;因为空格在替换中不需要转义,所以它会原封不动地保留。

示例:

% sed 's/ /\\ /g' <<<'foo  bar  spam'
foo\ \ bar\ \ spam

尝试过了,但没有任何变化发生。我的代码是:sed "s/ /\\ /g" filelist.tmp。它没有起作用! - Somenath Sinha
2
@SomenathSinha 不,像我使用的那样使用单引号,否则您将需要进行Shell转义。请这样做: sed 's/ /\\ /g' - heemayl
成功了!为什么用双引号不行呢? - Somenath Sinha
1
如果您使用双引号,shell 将解释 \\ 并为 sed 留下单个 \,因此 sed 将具有 s/ /\ /g,这将无法正常工作,如您现在所看到的。 - heemayl

3
您应该使用-r参数并修复语法。
sed -r "s/\s/\\\s/g" filelist.tmp

您的错误在于反斜杠 "\" 的转义顺序有误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接