输入:
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
知道[[:<:]]
和[[:>:]]
它的作品就像\<
与\>
分别。