我尝试使用以下sed命令删除字符串中所有仅为大写字母的出现次数,但只输出我输入的字符串 - 我该如何正确执行替换?
echo "Dog boy Did Good" | sed 's/\([A-Z]\+\)/\1/g'
echo "Dog boy Did Good" | sed 's/[A-Z]//g'
echo "Dog boy Did Good" | sed 's/[A-Z]//g'
og boy id ood
假设您所有的大写字母都是用 [A-Z]
表示的,这在美国英语中是标准的,那么您现在拥有的答案是很好的,但是未通过土耳其测试,因为土耳其语中有几个变体的字母 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)
命令可以轻松地进行删除操作:
$ tr -d [[:upper:]] < /etc/motd
elcome to buntu 11.04 (/inux 2.6.38-12-generic x86_64)
...
echo "Über Öko-Äpfel TNT" | sed 's/[A-Z]//g'
命令,我得到了结果ber ko-pfel
。使用的系统是 Ubuntu 10.04.3,LC_ALL=de_DE.utf8。 - user unknown