Bash 删除所有大写字母

Bash 删除所有大写字母,bash,sed,Bash,Sed,我试图用下面的sed命令删除以下字符串中出现的所有大写字母,但它只输出我输入的sting-如何正确地输入替换 echo "Dog boy Did Good" | sed 's/\([A-Z]\+\)/\1/g' 如果要完全删除它们,请不要在sed表达式的后半部分使用\1,因为这会在第一个匹配项中添加(这是您尝试替换的内容) 你用零替换某个东西(大写),你不需要对它进行分组,因为你以后不使用它,你也不需要+,因为g最终会全局执行替换。假设你所有的大写字母都是通过[A-Z]表示的,你现在得到的答案

我试图用下面的sed命令删除以下字符串中出现的所有大写字母,但它只输出我输入的sting-如何正确地输入替换

echo "Dog boy Did Good" | sed 's/\([A-Z]\+\)/\1/g'

如果要完全删除它们,请不要在sed表达式的后半部分使用\1,因为这会在第一个匹配项中添加(这是您尝试替换的内容)


你用零替换某个东西(大写),你不需要对它进行分组,因为你以后不使用它,你也不需要+,因为g最终会全局执行替换。

假设你所有的大写字母都是通过
[A-Z]
表示的,你现在得到的答案是好的,这在普通美式英语中是标准的,但是,它有几个字母
i
的变体

最好使用
[:upper:]
机制,它将尊重当前的
区域设置(7)

我想提及的另一种选择;
tr(1)
命令可以轻松执行删除操作:

$ tr -d [[:upper:]] < /etc/motd 
elcome to buntu 11.04 (/inux 2.6.38-12-generic x86_64)
...
$tr-d[:upper:]
在德语中,我收到的结果是
echo“ÜberÖko-Äpfel TNT”| sed的/[A-Z]//g'
结果
ber ko pfel
。Übüntü10.04.3,LC_ALL=de_de.utf8但我记得当时的情况,但事实并非如此——几年前
echo "Dog boy Did Good" | sed 's/[A-Z]//g'
og boy id ood
$ sed 's/[[:upper:]]//g' /etc/motd
elcome to buntu 11.04 (/inux 2.6.38-12-generic x86_64)
...
$ tr -d [[:upper:]] < /etc/motd 
elcome to buntu 11.04 (/inux 2.6.38-12-generic x86_64)
...