首页 > 解决方案 > grep:文件中的行没有这样的文件或目录

问题描述

我正在尝试 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

标签: bashgrep

解决方案


我建议更换

if grep -P 'TLS_RSA' $line; then

if grep -q 'TLS_RSA' <<< "$line"; then

为 grep 的标准输入提供变量的内容。


推荐阅读