【发布时间】:2020-10-14 12:53:35
【问题描述】:
我正在尝试 grep 文件中的每一行,并且对于每个匹配回显通过,对于每个不匹配回显失败。我收到“没有这样的文件或目录”错误,它似乎是在尝试 grep 文件而不是我在循环中传递的行?
文件:
$ cat new.txt
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
失败的脚本:
#!/bin/bash
while IFS= read -r line
do
if grep -P 'TLS_RSA' $line; then
echo "PASS."
else
echo "FAIL."
fi
done < "new.txt"
当对文件运行正常的 grep 命令时,这是输出(预期):
$ grep -P 'TLS_RSA' new.txt
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
【问题讨论】:
-
请将该示例输入的所需输出(无描述)添加到您的问题(无评论)。
-
抱歉,我已将示例编辑得更简单,并在复制和粘贴时打错了字。
-
awk '{ if ($0 ~ /TLS_RSA/) print "PASS"; else print "FAIL" }' new.txt是另一种选择。 -
请注意,您不需要
IFS=,因为您的读取仅使用 1 个变量;$line无论如何都会得到整条线。并且您不需要-P选项到grep,因为您不使用任何 Perl 特定的正则表达式功能。但正如 Cyrus 所建议的那样,您可能希望 grep 的-q(--quiet) 选项不打印匹配的行。