【问题标题】:How to remove all words written in capital letters ONLY (by using sed and/or awk)如何仅删除以大写字母书写的所有单词(使用 sed 和/或 awk)
【发布时间】:2013-11-16 13:30:52
【问题描述】:

我正在尝试使用 sed 删除所有以大写字母书写的单词:

sed -r "s/\b[A-Z]\w*\s*//g" < file1 > file2

但是这个解决方案捕获所有以大写字母开头的单词并将它们删除(这不是目标)。

这是一个例子:

file1 内容:

AAAAAAAAAAAA
BBbbbbb
AbAbAbAb
aaaaaBBBBB
AAAAAA BBBBBB
A1-B1
a1-b1
A1-b1 AA
AAAAA BBBBB AAAAA
Abbbb AAA
AAAAA AAAABB
Abbbb Baaaa Aaaaa AB
AAAAAA1
BBBBBBb
AAAAAA 1
BBBBBB b

结果应该是这样的(file2内容):

BBbbbbb
AbAbAbAb
aaaaaBBBBB
A1-B1
a1-b1
A1-b1 AA
Abbbb AAA
Abbbb Baaaa Aaaaa AB
AAAAAA1
BBBBBBb
AAAAAA 1
BBBBBB b

每行至少一个数字或一个小写字母应保持原样(不应删除)。

【问题讨论】:

    标签: regex bash shell awk sed


    【解决方案1】:
    sed -n "/[A-Z]/!p"
    

    不要打印至少有 1 个大写字母的行。只需检查是否要包含空行,在这种情况下它们被包含。

    【讨论】:

      【解决方案2】:

      使用 egrep:

      egrep "[^[:upper:] ]" file
      BBbbbbb
      AbAbAbAb
      aaaaaBBBBB
      A1-B1
      a1-b1
      A1-b1 AA
      Abbbb AAA
      Abbbb Baaaa Aaaaa AB
      AAAAAA1
      BBBBBBb
      AAAAAA 1
      BBBBBB b
      

      或使用 awk:

      awk '/[^[:upper:] ]/' file
      

      或使用 sed:

      sed -n '/[^[:upper:] ]/p' file
      

      【讨论】:

      • @damienfrancois:谢谢,是的,这是一个错字
      • 这个 awk '/[^A-Z ]/' 在我的标准 Ubuntu 12.4 上不起作用,因为本地语言搞砸了 A-Z。使用awk '/[^[:upper:] ]/' file更加稳定便携
      【解决方案3】:

      删除任何没有数字或小写字母的行:

      sed '/[[:digit:][:lower:]]/!d' file1 > file2
      

      【讨论】:

        【解决方案4】:

        从一开始就离你不远了。首先从您的正则表达式中删除\w,它匹配任何字母数字。然后只打印非空行。

        sed -rn "s/\b[A-Z]+\s*//g; /[a-z0-9]/p" < file1 > file2 
        

        【讨论】:

          【解决方案5】:

          试试:

          awk '! /^[[:space:][:upper:]]*$/' infile
          

          它产生:

          BBbbbbb
          AbAbAbAb
          aaaaaBBBBB
          A1-B1
          a1-b1
          A1-b1 AA
          Abbbb AAA
          Abbbb Baaaa Aaaaa AB
          AAAAAA1
          BBBBBBb
          AAAAAA 1
          BBBBBB b
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-07-18
            • 1970-01-01
            • 2014-11-23
            • 1970-01-01
            • 2010-12-05
            • 1970-01-01
            • 2015-12-10
            • 2021-11-12
            相关资源
            最近更新 更多