输入:
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
命令y
insed
将所有出现的第一组字符(仅+
此处)替换为第二组中相应的字符(此处仅空格)。
该s
命令将与正则表达式匹配的文本替换为某些文本。对于g
,它会在每次出现时执行此操作。如果没有它,则仅适用于每个输入行上的第一个。
仅当加号两侧有单词时才将加号更改为空格:
sed 's/\>+\</ /g'
这将更改为,a+b
但a 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 命令的快速指南