【发布时间】:2013-08-19 16:04:57
【问题描述】:
我正在尝试使用 grep 查找整个字符串。我熟悉 -w 标志,但它让我很难过,因为它将点作为分隔符。
例如,我在某个目录中有一个名为“a.txt”的文件和一个名为 a 的目录,会发生这种情况:
> ls | grep -w a
a
a.txt
我希望它找到的只是“a”,仅此而已。
我该怎么做?
【问题讨论】:
我正在尝试使用 grep 查找整个字符串。我熟悉 -w 标志,但它让我很难过,因为它将点作为分隔符。
例如,我在某个目录中有一个名为“a.txt”的文件和一个名为 a 的目录,会发生这种情况:
> ls | grep -w a
a
a.txt
我希望它找到的只是“a”,仅此而已。
我该怎么做?
【问题讨论】:
如果您想在一行中使用单个 a,请使用
grep '^a$'
如果只以空格作为分隔符,请使用
grep '\([[:space:]]\|^\)a\([[:space:]]\|$\)'
(即空格或行首,a,空格或行尾)。
【讨论】:
更简单的方法是:
grep '^[[:space:]]*a[[:space:]]*$'
对变量更友好的是使用 awk。它不会将输入模式解释为正则表达式。
awk -v v="$var" '{ sub(/^[[:space:]]*/, ""); sub(/[[:space:]]*$/, ""); }; $0 == v;'
【讨论】:
使用 grep 的 x 选项
ls | grep -x a
【讨论】: