【问题标题】:sed remove all capital letterssed 删除所有大写字母
【发布时间】:2011-12-08 07:47:34
【问题描述】:

我正在尝试使用下面的 sed 命令仅在以下字符串中删除所有出现的大写字母,但它只输出我输入的字符串 - 如何正确放置替换?

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

【问题讨论】:

    标签: bash sed


    【解决方案1】:
    echo "Dog boy Did Good" | sed 's/[A-Z]//g'
    

    【讨论】:

      【解决方案2】:
      echo "Dog boy Did Good" | sed 's/[A-Z]//g'
      og boy id ood
      

      你用什么东西(大写)替换一些东西,你不需要对它分组,因为你以后不用它,你也不需要+,因为最后 g 全局执行替换。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          你现在得到的答案很好,假设你所有的大写字母都用[A-Z]表示,这是常规美式英语的标准,但是fails the Turkey test,它有几个字母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。 Übüntü 10.04.3,LC_ALL=de_DE.utf8
          • 但我记得那些时代,但它不记得 - 几年前。 :)
          猜你喜欢
          • 2011-06-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-16
          • 2014-11-23
          • 2013-09-17
          • 1970-01-01
          • 2017-08-26
          • 1970-01-01
          相关资源
          最近更新 更多