【问题标题】:How to find words with Capital Letter using sed如何使用 sed 查找带有大写字母的单词
【发布时间】:2015-09-17 21:39:08
【问题描述】:

每当使用 sed 在文件中找到带有首字母大写字母的单词时,我都想打印“Found”。

我尝试过以下方法

s/\b[A-Z]\w*\s*/FOUND/g
/FOUND/d

但它不起作用。它只是用 Found 替换每个单词。

请告诉我哪里错了

【问题讨论】:

  • 你能提供一个示例输入和预期输出吗?我不清楚输出应该是什么。

标签: sed


【解决方案1】:

打印 FOUND 表示行内有一个大写的起始词

sed -e 's/^/ /;/[^[:alnum:]_-][A-Z]/ !d' -e 's/.*/FOUND: &/' YourFile
  • 调整[^[:alnum:]_-] 类以指定自动作为单词起始边缘的内容(这里不是数字、字母、-_,所以; 可用并且找到;Ok
  • 将第二部分(第二个-e 操作)调整为您想要的任何行(这里用FOUND 替换所有行)

打印 FOUND 代替每个大写字母单词

sed -e 's/^/ /' -e ':cycle' -e 's/\([^[:alnum:]_-]\)[A-Z][[:alnum:]-_]*/\1FOUND/g;t cycle' -e 's/.//' YourFile

【讨论】:

    【解决方案2】:

    这可能对你有用(GNU sed):

    sed '/\n/!s/\b[[:upper:]]\S*/\nFOUND\n/g;/^FOUND/P;D' file
    

    \nFOUND\n 替换以大写开头的每个单词(每行仅执行一次,因此不匹配\n)并仅打印以FOUND 开头的字符串,减少行直到它为空。然后在下一行重复等等。

    【讨论】:

      【解决方案3】:

      文件:

      Hi there
      
      My Name is Ian
      and I am Have no Worries 
      

      将文件拆分为单词,将每个以大写开头的单词替换为Found,然后打印出所有Founds,而忽略其余部分:

      sed 's/ /\n/g' file | sed 's/^[A-Z].*/Found/;/^Found/ !d'
      

      编辑:感谢 NeronLeVelu 指出 catgrep 是不必要的

      【讨论】:

      • 很多管道(不需要拳头猫,sed可以直接将文件作为最后一个参数)。 last sed 也可以直接充当 grep。使用您的代码:sed 's/ /\n/g' file | sed 's/^[A-Z].*/Found/;/^Found/ !d'
      • 感谢@NeronLeVelu 的帮助!
      猜你喜欢
      • 2014-11-28
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 2014-11-15
      • 2021-07-18
      • 1970-01-01
      • 2019-04-18
      相关资源
      最近更新 更多