【问题标题】:How to search for multiple strings in a file如何在文件中搜索多个字符串
【发布时间】:2011-02-04 18:45:33
【问题描述】:

我想在文件中搜索 string1 OR string2 OR string3 等的出现,并仅打印这些行(到 stdout 或文件,任一个)。如何在 bash 中轻松做到这一点?

【问题讨论】:

标签: bash file search string


【解决方案1】:

你也可以使用 awk

awk '/string1|string2|string3/' file

借助 awk,您还可以在需要时轻松使用 AND 逻辑。

awk '/string1/ && /string2/ && /string3/' file

【讨论】:

    【解决方案2】:
    grep "string1\|string2\|string3" file_to_search_in
    

    【讨论】:

    • 感谢陈先生的快速回复。当然,这行得通 - 漂亮!
    【解决方案3】:

    另一种选择,特别是如果您要搜索的字符串数量很大,是将这些字符串放入由换行符分隔的文件中并使用:

    grep -f file_of_strings file_to_search
    

    【讨论】:

      【解决方案4】:

      使用 Perl:

      perl -lne 'print if /string1|string2|string3/;' file1 file2 *.fileext
      

      使用 Bash 一个衬垫:

      while read line; do if [[ $line =~ string1|string2 ]]; then echo $line; fi; done < file
      

      使用 Bash 脚本:

      #!/bin/bash
      
      while read line
      do
          if [[ $line =~ string1|string2|string3 ]]; then
             echo $line
          fi
      done < file 
      

      请注意,"[[ $line =~ string1|string2 ]]" 周围的空格都是相关的。即这些在 Bash 中失败:

      [[ $line=~string1|string2 ]] # will be alway true...
      [[$line =~ string1|string2]] # syntax error
      

      【讨论】:

      • 你的 Bash one 衬里可以省略花括号。 dodone 会为您做到这一点。
      【解决方案5】:

      还有:

      grep -e 'string1' -e 'string2' -e 'string3'
      

      【讨论】:

      • 谢谢,兰迪,工作就像一个魅力!同时,我又找到了一个: egrep 'string1|string2' infile
      猜你喜欢
      • 1970-01-01
      • 2011-04-28
      • 2019-08-15
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 2020-06-25
      相关资源
      最近更新 更多