Grep 仅匹配行 [closed] 中的确切字符串

Grep match only the exact string in the line [closed]

提问人:Chel MS 提问时间:9/27/2023 更新时间:9/27/2023 访问量:281

问:


这个问题似乎不是关于特定的编程问题、软件算法或程序员主要使用的软件工具。如果您认为该问题在另一个 Stack Exchange 站点上是主题,您可以发表评论以解释该问题可能在哪里得到回答。

上个月关闭。

我正在尝试从以下命令的输出中获取该词OK

valtool --validate <filename>这抛出低于输出

如果成功 --> &如果失败 --><filename>: layers signatures val OK<filename>: layers signatures val NOT OK

log='/home/files/rapid.so: layers signatures NOT OK'
~$ echo $log
/home/files/rapid.so: layers signatures NOT OK

~$ echo $log |grep -w 'OK' ;echo $?
/home/files/rapid.so: layers signatures NOT OK
0

理想情况下,它应该按照要求返回。我尝试了这个论坛上建议的其他选项,但没有任何帮助。 我希望获得 if only 匹配的返回值,否则.10OK1

bash --version
GNU bash, version 5.1.4(1)-release (x86_64-pc-linux-gnu)
Linux Bash 格雷普

评论

1赞 KamilCuk 9/27/2023
你不能做吗?valtool --validate <filename>; echo $?
2赞 user1934428 9/27/2023
怎么样 ?grep -E 'signatures +OK'
1赞 Chel MS 9/27/2023
@user1934428 : 很好,我想不到。伟大+
2赞 user1934428 9/27/2023
顺便说一句,将文件存储到变量中然后生成子进程是没有意义的。最好直接grep它:。但是如果你需要一个变量,那么不要用它来检查它,而是像这样的东西loggrepif grep ....; then; ...grep[[ $log =~ signatures' '+OK ]]
1赞 Chel MS 9/27/2023
@user1934428 : 不,我没有存储在变量中,只是为了表示..

答:

0赞 KamilCuk 9/27/2023 #1

所以反转不行。

! grep "NOT OK$" <<<"$log"; echo $?

评论

1赞 Freeman 9/28/2023
因为你的好主意 1++
0赞 Freeman 9/27/2023 #2

看看这个:

echo "$log" | grep -w 'NOT OK' >/dev/null && echo 1 || echo 0

并把它做成一个简单的脚本:

log=$(valtool --validate <filename>)

if echo "$log" | grep -w 'NOT OK' >/dev/null; then
    echo "Validation failed"
    exit 1
else
    echo "Validation successful"
    exit 0
fi

评论

1赞 Freeman 9/27/2023
给我负面评价的朋友应该善意地解释为什么他们给了我负面评价,以便我解决这个问题!
2赞 KamilCuk 9/28/2023
我投了赞成票。