可以请别人帮我吗?我有这条线
test.txt
siemplog1.nw.lan / 172.31.180.22
我试过这个命令 sed -Ei "s/^[a-z A-Z].*([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/\1/" test.txt
结果应该是,172.31.180.22
但我明白了2.31.180.22
谢谢
在.*
如,因为它可以(它是“贪婪”),并且由于许多字符的匹配[0-9]{1,3}
可以匹配仅有1位,则17
通过匹配.*
和2
由匹配[0-9]{1,3}
。
您可以.*
在所有非数字前停止:
sed -Ei 's~.*[^0-9]([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*~\1~' test.txt
或之前/
:
sed -Ei 's~.*/ *([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*~\1~' test.txt
参见在线sed演示:
s='siemplog1.nw.lan / 172.31.180.22'
sed -E 's~.*/ *([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*~\1~' <<< "$s"
# => 172.31.180.22
如果字符串始终采用这种格式,则可以将sed命令简化为
sed -E 's~.*/ *([0-9.]+)~\1~p'
sed -E 's~.*/ *([0-9.]+).*~\1~p'
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句