在文本文件中我有以下条目:
10.1.0.10-15
10.1.0.20-25
10.1.0.30-35
10.1.0.40-45
我想打印10.1.0.10,15, 20, 25,30
cat file | grep 10.1.0.[1,2,3][0.5] -- prints 10,15,20,25,30, 35.
如何压制35?
我不想使用grep -v .35 ...只想打印特定的IP或#s。
答案 0 :(得分:2)
您可以使用:
grep -E '10\.1\.0\.([12][05]|30)' file
然而,awk会更具可读性:
awk -F '[.-]' '$4%5 == 0 && $4 >= 10 && $4 <= 30' file
10.1.0.10-15
10.1.0.20-25
10.1.0.30-35
答案 1 :(得分:1)
请注意,不需要字符类中的,
和.
- 事实上,它们匹配您不希望模式匹配的数据。此外,字符类外部的.
匹配任何字符(数字,字母或.
,如您所愿) - 您需要使用反斜杠转义它们,以便它们仅匹配实际.
}。
此外,您正在犯Useless Use of cat
(UUoC)错误; grep
可以很好地从文件中读取。
至于做什么,可能会使用:
grep -E '10\.1\.0\.([12][05]|30)' file
这使用扩展正则表达式(以前用于egrep
,现在为grep -E
)。它还避免了点匹配任何字符。
答案 2 :(得分:0)
我不确定你想要的只是打印前两个IP,不包括35个。在这种情况下cat file | grep '10.1.0.[1-3]0.[15|25]'
完成工作。
请记住,您可以使用|
等条件表达式来帮助您。