输入:
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 -E在sed支持它的版本中),那么您需要转义加号:
sed -E 's/\+/ /g' ...
Run Code Online (Sandbox Code Playgroud)
(有关正则表达式变体之间的区别,请参阅此问题。)
$ 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+b到a b,但会留下a + b和a++b修改。
该模式\>匹配单词末尾的零宽度空格,\<类似于单词的开头。GNUsed也理解\b(或者开始或词的结尾),以及BSDsed知道[[:<:]]和[[:>:]]它的作品就像\<与\>分别。