【问题标题】:Finding a whole string using grep使用 grep 查找整个字符串
【发布时间】:2013-08-19 16:04:57
【问题描述】:

我正在尝试使用 grep 查找整个字符串。我熟悉 -w 标志,但它让我很难过,因为它将点作为分隔符。

例如,我在某个目录中有一个名为“a.txt”的文件和一个名为 a 的目录,会发生这种情况:

> ls | grep -w a
a
a.txt

我希望它找到的只是“a”,仅此而已。

我该怎么做?

【问题讨论】:

    标签: bash scripting grep flags


    【解决方案1】:

    如果您想在一行中使用单个 a,请使用

    grep '^a$'
    

    如果只以空格作为分隔符,请使用

    grep '\([[:space:]]\|^\)a\([[:space:]]\|$\)'
    

    (即空格或行首,a,空格或行尾)。

    【讨论】:

      【解决方案2】:

      更简单的方法是:

      grep '^[[:space:]]*a[[:space:]]*$'
      

      对变量更友好的是使用 awk。它不会将输入模式解释为正则表达式。

      awk -v v="$var" '{ sub(/^[[:space:]]*/, ""); sub(/[[:space:]]*$/, ""); }; $0 == v;'
      

      【讨论】:

        【解决方案3】:

        使用 grep 的 x 选项

         ls | grep -x a
        

        【讨论】:

          猜你喜欢
          • 2012-04-17
          • 1970-01-01
          • 1970-01-01
          • 2022-01-08
          • 2011-09-04
          • 2018-12-18
          • 2016-04-28
          • 2018-11-29
          • 2021-09-11
          相关资源
          最近更新 更多