grep 用于模式匹配

grep 用于模式匹配

我在将模式从脚本文件读取到另一个文件时遇到问题。基本上,一个文件的输出应该用作另一脚本文件的输入。 maze_gen 的输出是 # 和空格符号的数组。下面的示例 5 7 表示输出的高度和宽度。

if [`./maze_gen 5 7 | grep -E "[^# ]"` ]; then
        echo no
else 
        echo yes
fi

maze_gen是一个生成一系列# 带空格符号的文件。这将作为我当前正在处理的输入文件接收。我的代码有问题,我无法检查输入是否只有# 字符。

答案1

看起来您想测试 的输出是否./maze_gen 5 7包含除空格和散列之外的字符。

您可以使用更有效地做到这一点

if ./maze_gen 5 7 | grep -q '[^ #]'
then
    echo no
else
    echo yes
fi

这实际上并不提炼与表达式匹配的行。相反grep -q,一旦模式匹配就退出,并且语句grep中使用 的退出状态if来确定要采用哪个分支(echo noecho yes)。

这比您似乎想要做的更有效,因为grep一旦模式匹配,实用程序就会停止处理其输入,并且 shell 不必存储输出以grep在字符串比较测试中使用。

您的代码无法运行,因为它包含语法错误。[周围需要空间。

另请注意,-E可以使用 的某些实现来启用扩展正则表达式grep。在您的例子中,不需要这样做,因为表达式是基本的正则表达式。

相关内容