我正在尝试确定行中字符串的完全匹配。但是无法获得所需的实际输出。
行
# 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
答案 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子系统上尝试过,而且似乎可以解决问题)