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

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

输入:

United+States

输出:

United States

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

答案1

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

<<< 'United+States' sed 's/+/ /g'

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

sed 's/+/ /g' filename

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

sed -E 's/\+/ /g' ...

(看这个问题了解正则表达式变体之间的差异。)

答案2

$ echo 'United+States' | tr '+' ' '
United States

由于您只更改单个字符,因此使用 来执行此操作会更快tr

等效的sed脚本看起来像

$ echo 'United+States' | sed 'y/+/ /'
United States

或者

$ echo 'United+States' | sed 's/+/ /g'
United States

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

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


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

sed 's/\>+\</ /g'

这将更改为,a+ba b将保持a + b不变a++b

该模式\>与单词末尾的零宽度空格匹配,并且\<与单词的开头类似。 GNUsed也能理解\b(单词的开头或结尾),而 BSD 则sed知道 和[[:<:]][[:>:]]它们的工作方式分别与\<和一样\>

答案3

您可以检查此示例并根据您的结果进行工作。

示例:- 此代码进行更改并将修改后的文件写入“songs2.txt”。输出文件包含:

1、贾斯汀·汀布莱克,标题 545,价格 7.30 美元
2、泰勒·斯威夫特,标题 723,价格 7.90 美元
3、米克·贾格尔,标题 610,价格 7.90 美元
4、Lady Gaga,标题 118,价格 7.30 美元
5、约翰尼·卡什,标题 482,价格 6.50 美元
6、埃尔维斯·普雷斯利,标题 335,价格 7.30 美元
7、约翰·列侬,标题 271,价格 7.90 美元

如果您想替换所有出现的“现金“ 和 ”垃圾“ 你用:

sed 's/Cash/Trash/' songs.txt > songs2.txt

参考链接:-在 Linux 中使用 Sed 命令的快速指南

相关内容