我正在尝试查找包含这两个字符“/ +”的字母数字字符串,长度至少为30个字符。
我已经写了这段代码,
grep "[a-zA-Z0-9\/\+]{30,}" tmp.txt
cat tmp.txt
> array('rWmyiJgKT8sFXCmMr639U4nWxcSvVFEur9hNOOvQwF/tpYRqTk9yWV2xPFBAZwAPRVs/s
ddd73ZEjfy+airfy8DtqIqKI9+dd 6hdd7soJ9iG0sGs/ld5f2GHzockoYHfh
+pAzx/t17Crf0T/2+8+reo+MU39lqCr02sAkcC1k/LzyBvSDEtu9N/9NHicr jA3SvDqg5s44DFlaNZ/8BW37fGEf2rk13S/q68OVVyzac7IT7yE7PIL9XZ/6LsmrY
KEsAmN4i/+ym8be3wwn KWGYaIB908+7W98pI6qao3iaZB
3mh7Y/nZm52hyLa37978f+PyOCqUh0Wfx2PL3vglofi0l
QVrOM1pg+mFLEIC88B706UzL4Pss7ouEo+EsrES+/qJq9Y1e/UGvwefOWSL2TJdt
这不起作用,主要是我希望字符串的最小长度为30
答案 0 :(得分:1)
在grep
的语法中,重复括号需要反斜杠。
grep -o '[a-zA-Z0-9/+]\{30,\}' file
如果要将匹配限制为仅包含与此模式匹配的行,请添加line-start和line-ending anchors:
grep '^[a-zA-Z0-9/+]\{30,\}$' file
第一个命令行中的-o
选项会导致grep
仅打印匹配的部分,而不是整个匹配的行。
答案 1 :(得分:1)
Basic Regular Expression语法中不直接支持重复运算符。使用grep -E
启用扩展正则表达式语法,或反斜杠括号。
答案 2 :(得分:0)
您可以使用
grep -e "^[a-zA-Z0-9/+]\{30,\}" tmp.txt
grep -e "^[a-zA-Z0-9/+]\{30,\}" tmp.txt
+pAzx/t17Crf0T/2+8+reo+MU39lqCr02sAkcC1k/LzyBvSDEtu9N/9NHicr jA3SvDqg5s44DFlaNZ/8BW37fGEf2rk13S/q68OVVyzac7IT7yE7PIL9XZ/6LsmrY
3mh7Y/nZm52hyLa37978f+PyOCqUh0Wfx2PL3vglofi0l
QVrOM1pg+mFLEIC88B706UzL4Pss7ouEo+EsrES+/qJq9Y1e/UGvwefOWSL2TJdt
答案 3 :(得分:0)
man grep
了解常规和扩展模式之间的区别。您需要-E
选项。