【问题标题】:grep not consider dot in exact searchgrep 在精确搜索中不考虑点
【发布时间】:2020-05-17 13:42:31
【问题描述】:

grep 只能精确匹配吗?

我的文件

# cat tlds.csv 
159,.COM,com.csv
862,.UK.COM,uk.com.csv
866,.US.COM,us.com.csv

我在终端中的命令

# cat tlds.csv | grep -i -w  'com.csv'
159,.COM,com.csv
862,.UK.COM,uk.com.csv
866,.US.COM,us.com.csv

需要的输出 ** 159,.COM,com.csv**

我只需要com.csv 不需要其他结果。有什么办法可以做到这一点?

【问题讨论】:

  • 你能清楚你的期望吗?你想像示例中那样获得整个 1 行,还是像描述中那样仅获得字符串 com.csv?

标签: linux awk grep


【解决方案1】:

您可以使用正则表达式:

cat tlds.csv | grep -E ',com\.csv$'

通过这种方式,您告诉 grep 您只需要在com.csv 之前有, 的那些行,而在com.csv 之后仅此而已。

你也可以使用

cat tlds.csv | grep -E '[^.]com\.csv$'

告诉 grep 在com.csv 之前,除了. 之外的任何字符都可以。 无论如何,如果我可以添加一个建议,我不会使用cat。 grep 可以将您的文件作为参数,这样 int:

grep -E '[^.]com\.csv$' tlds.csv

Here 你可以明白为什么你不应该使用cat

【讨论】:

    【解决方案2】:

    这将仅打印您要搜索的特定字段(最后一个,即 awk 中的 $NF)与您要查找的特定文字字符串(即 "com.csv")完全匹配的行:

    $ awk -F, '$NF=="com.csv"' file
    159,.COM,com.csv
    

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 2019-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多