gpt4 book ai didi

linux - 我如何使用 GREP 来确定文件中的每一行是否都与我的模式相匹配?

转载 作者:行者123 更新时间:2023-12-03 09:48:28 25 4
gpt4 key购买 nike

我正在尝试检查文件中的每一行是否与我的模式匹配(4 个字符后跟 4 个数字)。我尝试将 GREP 与 -x -P -v -q 选项一起使用,因此如果我的文件不符合要求,它会返回 1。我希望它在文件正确的情况下不返回任何内容,但即使文件有错误它也不返回任何内容。$4 是我的输入文件。我的代码是:

if [ -f $4 ] && [ `grep -q -P -x -v [[a-z]x{4}/[\dx{4}] $4` ]
then
echo "error"
exit 1
fi

输入示例:bmkj2132ahgc3478(无大写)

最佳答案

不要检查 grep 的输出,检查它的退出代码。

if [ -f "$4" ] && grep -q ...

请注意 $4 周围的双引号 - 否则包含空格的文件名会破坏脚本。

此外,单引号正则表达式。方括号在 bash 中很特殊,您不希望正则表达式在随机文件名存在时突然改变(展开)。

另请注意,x 并不表示“时间”(在 -e、-E、-P 下都不是)。量词紧跟在量词之后,中间没有运算符:

echo abcd1234 | grep -xP '[a-z]{4}\d{4}'

所以,完整的条件应该是

if [ -f "$4" ] && grep -qvxP '[a-z]{4}\d{4}' "$4" ; then
echo Error >&2
exit 1
fi

如果文件不存在,您确定要继续吗?如果不是,则将条件更改为

if ! [ -f "$4" ] || grep ...

顺便说一句,您实际上并不需要此处的 PCRE 表达式。如果将 \d 替换为 [0-9][[:digit:]],则可以切换到 -E (扩展正则表达式)。

关于linux - 我如何使用 GREP 来确定文件中的每一行是否都与我的模式相匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62285249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com