如何修复错误 agrep:模式太长(有 > 32 个字符),如果字符串中没有句号,它不会显示错误?



agrep 在模式字符串中有句号(.( 时给出错误agrep: pattern too long (has > 32 chars),否则不会。

我想比较(大约(两个字符串,所以我为此使用 agrep,但它给出了错误agrep: pattern too long (has > 32 chars).但是我发现如果模式字符串中没有句号,它不会给出错误(为什么?

`echo "The quick brown fox jumped over the lazy dog." | agrep -c -4 "The quick brown fox jumped over the lazy dog."`

预期输出为 1,而是给出错误:agrep: pattern too long (has > 32 chars)

如果我删除句号,它可以工作:

$ echo "The quick brown fox jumped over the lazy dog." | agrep -c -4 "The quick brown fox jumped over the lazy dog"  
1

近似字符串匹配/使用两个字符串进行模糊字符串搜索。

agrepbash

if agrep -1 "abc" <<< "xbc" >/dev/null; then echo "match"; else echo "no match"; fi

或带有tre-agrepbash

if tre-agrep -q -1 "abc" <<< "xbc"; then echo "match"; else echo "no match"; fi

两种情况下的输出:

火柴

问题是agrep.视为元字符。为避免这种情况,您必须传递选项-k

echo "The quick brown fox jumped over the lazy dog." | agrep -c -4 -k "The quick brown fox jumped over the lazy dog."

agrep 上的手册页说:

-k 模式中的任何符号都被视为元字符。

32 个字符的限制与其优化的寄存器宽度有关:32 位。请参阅agrep.h中的#define WORD 32

切换到 64 位似乎比将unsigned更改为unsigned long并在 agrep.h 中将常量加倍要多。

相关内容

  • 没有找到相关文章

最新更新