【问题标题】:grep lines contain exact string in a filegrep 行在文件中包含确切的字符串
【发布时间】:2017-10-09 22:00:12
【问题描述】:

我有一个文件包含很多行
我想 grep 行包含一个使用变量的字符串,该字符串是一个 uri,如:

/wp-admin/admin-ajax.php

我只想 grep 包含确切 uri 的行:

/wp-admin/admin-ajax.php

不要像这样提取行:

/wp-admin/admin-ajax.php?blahblah

示例文件:

4.2.2.4 sitename.com/wp-admin/admin-ajax.php
4.2.2.4 sitename.com/wp-admin/admin-ajax.php?
4.2.2.4 sitename.com/wp-admin/admin-ajax.php?blah
4.2.2.4 sitename.com/wp-admin/admin-ajax.php?blahblah

搜索主题:

sitename.com/wp-admin/admin-ajax.php

应该像这样提取行:

4.2.2.4 sitename.com/wp-admin/admin-ajax.php

【问题讨论】:

    标签: bash grep lines


    【解决方案1】:

    -F 选项添加到 grep 以告诉它使用字符串而不是正则表达式和 -x 来处理整行:

    grep -x -F "$variable"
    

    参见手册页。

    鉴于您更新的问题:

    $ awk -v tgt='sitename.com/wp-admin/admin-ajax.php' '$NF==tgt' file
    4.2.2.4 sitename.com/wp-admin/admin-ajax.php
    

    【讨论】:

    • 我不想匹配整行,搜索字符串是行的一部分,但我想提取整行
    • 而且搜索字符串应该是准确的,意味着“搜索”不应该提取“搜索”
    • 鉴于您更新的问题,我刚刚更新了我的答案。
    • 太好了,你的 awk 解决了我的问题,非常感谢
    【解决方案2】:

    这个怎么样:

    awk 'NR==FNR{a[$0]; next} $1 in a' pattern.txt data_file.txt
    

    假设您将数据保存在data_file.txt 中,例如:

    www.sitename.com/admin/index.php
    www.sitename.com/admin
    www.sitename.com/
    ...
    

    以及您想在另一个文件中识别的内容,例如pattern.txt点赞:

    www.sitename.com/admin
    

    【讨论】:

    • 我将您的代码用作管道:| awk 'NR==FNR{a[$0];下一个} $1 in a' $variable not working
    • 哦,好的。然后就更简单了:| awk -vvar=$variable '$0==var'
    • -vvar= 之间不留空格会使您的代码不必要地特定于gawk。留个空格:awk -v var="$variable" '$0==var' file。当然,请记住始终引用您的 shell 变量。
    • 不走运,搜索字符串是:/wp-admin/admin-ajax.php,你能测试一个样本吗?
    • @Tasos 不,您不能进行正则表达式匹配,否则您必须转义所有 RE 元字符,例如,a.c 将匹配 abc。您还必须引入单词分隔符或类似的东西来绑定正则表达式。在 OP 发布真实的样本输入/输出之前,我们只是在猜测他需要什么。
    最近更新 更多