我试图搜索文件" Sessions"包含IP地址(以及其他无用的垃圾)。我的Grep无法匹配,即使REGEXR完全匹配所有IP ...所以我知道REGEX是正确的...但是当我为这个相同的模式GREP时,不会返回。
for i in $(grep --regexp=[0-9]{1,3}[\.][0-9]{1,3}[\.][0-9]{1,3}[\.][0-9]{1,3} sessions); do echo $i; done
我尝试了GREP的各种方式(没有长选项)
for i in $(grep '^[0-9]{1,3}[\.][0-9]{1,3}[\.][0-9]{1,3}[\.][0-9]{1,3}$' sessions); do echo $i; done
for i in $(grep "[0-9]{1,3}[\.][0-9]{1,3}[\.][0-9]{1,3}[\.][0-9]{1,3}" sessions); do echo $i; done
我不明白。我已经阅读了手册页,也尝试了egrep。以下是我正在搜索的内容的示例...
SEGMENT=#109#0%111.111.111.111%22%USER%%-1%-1% %%22%%0%-1%Interactive shell%
SEGMENT=#109#0%222.222.222.222%22%USER%%-1%-1% %%22%%0%-1%Interactive shell%
SEGMENT=#109#0%333.333.333.333%22%USER%%-1%-1% %%22%%0%-1%Interactive shell%
SEGMENT=#109#0%444.444.444.444%22%USER%%-1%-1% %%22%%0%-1%Interactive shell%
SEGMENT=#109#0%555.555.555.555%22%USER%%-1%-1% %%22%%0%-1%Interactive shell%
答案 0 :(得分:1)
您不应该使用{
转义}
和\
,也可能希望-o
用于" o nly show match"
grep -o --regexp="[0-9]\{1,3\}[\.][0-9]\{1,3\}[\.][0-9]\{1,3\}[\.][0-9]\{1,3\}" sessions
答案 1 :(得分:1)
如其他答案中所述,您需要转义{
和}
。
或者,根据您的输入格式,我认为这更简单易读:
awk -F'%' '{ print $2 }' sessions
它的工作原理是在%
字符周围分割每一行并选择第二个字段。
答案 2 :(得分:0)
问题是我没有逃脱花括号,谢谢@Victory!一旦我这样做,一切都奏效了。此外,用“%”分割字段也非常好,再次感谢@Filipe Goncalves