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
近似字符串匹配/使用两个字符串进行模糊字符串搜索。
agrep
和bash
:
if agrep -1 "abc" <<< "xbc" >/dev/null; then echo "match"; else echo "no match"; fi
或带有tre-agrep
和bash
:
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 中将常量加倍要多。