Grep regexp用于匹配文件中的IP地址

时间:2015-09-02 22:48:29

标签: regex linux bash shell grep

我试图搜索文件" 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%

3 个答案:

答案 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

相关问题