grep需要一些帮助

时间:2014-12-09 08:14:11

标签: linux shell grep

我正在尝试查找包含这两个字符“/ +”的字母数字字符串,长度至少为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

4 个答案:

答案 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选项。