我试图仅使用下面的sed命令在以下字符串中删除所有出现的大写字母,但它只输出我输入的刺痛 - 如何正确地替换?
echo "Dog boy Did Good" | sed 's/\([A-Z]\+\)/\1/g'
答案 0 :(得分:7)
echo "Dog boy Did Good" | sed 's/[A-Z]//g'
答案 1 :(得分:2)
echo "Dog boy Did Good" | sed 's/[A-Z]//g'
og boy id ood
你没有任何东西替换某些东西(大写),你不需要对它进行分组,因为你以后不再使用它,而且你不需要+,因为g最后会全局执行替换。
答案 2 :(得分:1)
如果要完全删除它们,请不要在sed表达式的后半部分使用\ 1,因为它会在第一个匹配项中添加(这是您要替换的内容)
答案 3 :(得分:1)
现在你的答案很好,假设所有的大写字母都是通过[A-Z]
表示的,这是普通美式英语的标准,但是{{3}},它有几个字母的变体{{ 1}}。
最好使用i
机制,它将尊重当前的[[:upper:]]
:
locale(7)
我想提及的另一种选择; $ sed 's/[[:upper:]]//g' /etc/motd
elcome to buntu 11.04 (/inux 2.6.38-12-generic x86_64)
...
命令可以轻松删除:
tr(1)