如何用sed中的空格替换加号?

αԋɱ*_*cαη 4 sed

输入:

United+States
Run Code Online (Sandbox Code Playgroud)

输出:

United States
Run Code Online (Sandbox Code Playgroud)

我尝试了很多次使用都sed没有成功。

sud*_*dus 17

默认情况下,sed使用基本正则表达式 (BRE),其中加号并不特殊。因此,您可以s像使用常规字符一样在命令中使用它:

<<< 'United+States' sed 's/+/ /g'
Run Code Online (Sandbox Code Playgroud)

如果要在同一行 ( g) 或多行中修改具有多个实例的文件

sed 's/+/ /g' filename
Run Code Online (Sandbox Code Playgroud)

如果您使用扩展的正则表达式(ERE,sed -Esed支持它的版本中),那么您需要转义加号:

sed -E 's/\+/ /g' ...
Run Code Online (Sandbox Code Playgroud)

(有关正则表达式变体之间的区别,请参阅此问题。)


Kus*_*nda 8

$ echo 'United+States' | tr '+' ' '
United States
Run Code Online (Sandbox Code Playgroud)

由于您只更改单个字符,因此使用tr.

等效的sed脚本看起来像

$ echo 'United+States' | sed 'y/+/ /'
United States
Run Code Online (Sandbox Code Playgroud)

或者

$ echo 'United+States' | sed 's/+/ /g'
United States
Run Code Online (Sandbox Code Playgroud)

中的y命令sed用第二组中+的相应字符(此处仅空格)替换所有出现的第一组字符(仅此处)。

s命令用一些文本替换与正则表达式匹配的文本。使用g,它会在每次出现时执行此操作。没有它,仅适用于每个输入行上的第一个。


仅当加号两侧有单词时才将加号更改为空格:

sed 's/\>+\</ /g'
Run Code Online (Sandbox Code Playgroud)

这将改变a+ba b,但会留下a + ba++b修改。

该模式\>匹配单词末尾的零宽度空格,\<类似于单词的开头。GNUsed也理解\b(或者开始或词的结尾),以及BSDsed知道[[:<:]][[:>:]]它的作品就像\<\>分别。