精确匹配一行中的单词-Unix

时间:2019-12-23 07:52:08

标签: shell unix awk grep

我正在尝试确定行中字符串的完全匹配。但是无法获得所需的实际输出。

# file: /test/test1 # owner: own # group: accnt group::--x other::r-x default:user::rwx default:group::r-x default:mask::r-x default:other::r-x  user:an:rw-

模式

user::rwx

命令

echo "# file: /test/test1 # owner: own # group: accnt group::--x other::r-x default:user::rwx default:group::r-x default:mask::r-x default:other::r-x  user:an:rw-" | grep -w "user::rwx" | wc -l

预期产量

0

实际输出

1

尝试了其他选项

echo "# file: /test/test1 # owner: own # group: accnt group::--x other::r-x default:user::rwx default:group::r-x default:mask::r-x default:other::r-x  user:an:rw-" | fgrep -x "user::rwx" | wc -l

echo "# file: /test/test1 # owner: own # group: accnt group::--x other::r-x default:user::rwx default:group::r-x default:mask::r-x default:other::r-x  user:an:rw-" | grep -Eo "user::rwx" | wc -l

echo "# file: /test/test1 # owner: own # group: accnt group::--x other::r-x default:user::rwx default:group::r-x default:mask::r-x default:other::r-x  user:an:rw-" | grep -wo "user::rwx" | wc -l

3 个答案:

答案 0 :(得分:2)

您可以尝试使用以下命令,看看此命令是否适用于您要查找的所有方案。 echo .. | grep -oP '\suser::rwx\s' | wc -l

答案 1 :(得分:1)

编辑: :如果您要打印包含确切单词的行,请尝试遵循。

var="user::rwx"
awk -v var="$var" 'match($0,var){count++} END{print count}' Input_file


能否请您尝试以下。如果在文件的任何一行中找到完全匹配的内容,它将打印0。

var="user::rwx"
awk -v var="$var" 'match($0,var){print substr($0,RSTART,RLENGTH)}' Input_file

恕我直言,为什么OP的代码不起作用,因为OP正在使用wc命令,该命令将给出输出的行数,但是看起来像当找到匹配项时OP想要打印0(如果我在这里没记错的话)

答案 2 :(得分:0)

在这一部分,您的行似乎包含提到的单词:

default:user::rwx

您提到您不希望这样做(仅应考虑整个user::rwx的那一部分),所以为什么不简单地将开始空间添加到grep中,如下所示:

echo ... | grep -w " user::rwx" | wc -l    # mind the space in front of "user"

(我在Ubuntu子系统上尝试过,而且似乎可以解决问题)