【问题标题】:grepping lines from a document using xargs使用 xargs 从文档中查找行
【发布时间】:2013-09-11 04:14:30
【问题描述】:

假设我有 queries.txt。

queries.txt:

cat
dog
123

现在我想使用它们是使用 grep 在 myDocument.txt 中查找行的查询。

cat queries.txt | xargs grep -f myDocument.txt

myDocument 有类似的行

cat
i have a dog
123
mouse

它应该返回前 3 行。但事实并非如此。相反,grep 尝试将它们作为文件名查找。我做错了什么?

【问题讨论】:

    标签: unix grep xargs


    【解决方案1】:

    在这里,您只需要:

    grep -f queries.txt myDocument.txt
    

    这会导致grep 从文件queries.txt 中读取正则表达式,然后将它们应用到myDocument.txt

    xargs 版本中,您正在有效地写作:

    grep -f myDocument.txt cat dog 123
    

    如果你绝对必须使用xargs,那么你需要写:

    xargs -I % grep -e % myDocument.txt < queries.txt
    

    这避免了 UUOC — 无用使用 cat — 通过重定向来自 queries.txt 的标准输入奖励。它使用-I % 选项指定替换文本在命令行中的位置。使用-e 选项意味着如果模式是--help,您不会遇到(GNU)grep 将其视为参数(并因此打印其帮助消息)的问题。

    【讨论】:

      【解决方案2】:

      grep-e 选项将模式字符串作为参数。 -f 将参数视为包含模式的文件的文件名。

      【讨论】:

        猜你喜欢
        • 2012-07-17
        • 1970-01-01
        • 2020-11-07
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 2014-02-17
        • 1970-01-01
        相关资源
        最近更新 更多