首页 > 解决方案 > 匹配一行中的确切单词 - Unix

问题描述

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

线

# 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

标签: shellunixawkgrep

解决方案


编辑:如果您想打印具有确切单词的行,请尝试以下操作。

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找到匹配项时打印(如果我在这里没有错)


推荐阅读