【问题标题】:Selecting lines which match any word from a list with grep使用 grep 从列表中选择与任何单词匹配的行
【发布时间】:2011-02-26 16:48:21
【问题描述】:

如果出现了单词列表中的至少一个元素,grep 可以选择行吗?例如

grep "hello world" file1 

grep 必须给我所有包含单词 hello 或单词 world 或两者的行。

【问题讨论】:

    标签: linux shell scripting csh tcsh


    【解决方案1】:
    grep "hello\|world" file1
    

    【讨论】:

    • 抱歉,我有类似“$numbers”之类的东西,不完全是“hello world”,所以它不起作用,还有其他想法吗?
    • @lego69: numbers="1 3 5" 是这样的吗?
    • 是的,现在我想选择所有包含这些数字的行
    • or_nums=$(echo "$numbers" | sed -e 's: :\\|:g') grep "$or_nums" 文件
    • @Anton;您在 grep 之前需要一个分号(在您的评论中,而不是您的答案中)。如果没有分号,则在 grep 的环境中设置了 or_nums,但 shell 不会将参数列表中的 $or_nums 扩展为 grep。
    【解决方案2】:

    将您的模式放入某个文件 patterns.txt,每行一个模式,然后运行

    grep -Ff patterns.txt file1
    

    【讨论】:

      【解决方案3】:

      怎么样

      grep -r "hello\|world" file1
      

      顺便说一句,这是一个递归的grep。它在 file1 中递归搜索术语“hello world”。它也可以应用于这样的目录:

      grep -r "hello\|world" dir/dir2/
      

      【讨论】:

      • 我还需要仅出现 hello 或仅 world 的情况
      • 您可以使用 Anton 的上述 grep,但只需添加 -r 即可进行递归。类似 grep -r "hello\|world" file1
      【解决方案4】:

      试试这个,

      echo "hello world "| grep -o  "\bworld\b" 
      

      输出是

      world 
      

      grep -E 'hello|world' filename
      

      【讨论】:

      • 欢迎来到 Stack Overflow。这只能回答部分问题。给定输入行1 hello world2 hello3 the world-wide web,应返回所有三行。您的答案不会选择第 2 行。我也不认为答案应该只返回单词。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多