我刚刚开始使用sed
,我打算用它从ping
输出中提取 IP 地址。这就是我想要实现的目标:
输入文本:
ytmti (192.188.2.3) jjggy
期望的输出:
192.188.2.3
我正在尝试的命令:
echo "ytmti (192.188.2.3) jjggy" | sed 's:\((\(192.188.2.3\))\):\2:'
电流输出:
ytmti 192.188.2.3 jjggy
注意:ytmti
and实际上是andjjggy
等文本的替代品。Pinging unix.stackexchange.com
with 32 bytes of data:
我认为使用awk
可能是解析输出的更好解决方案ping
,但我想习惯sed
.
答案1
的替换命令sed
将第一部分中匹配的所有字符替换为第二部分中的所有字符,因此您将需要.*
或类似并仅对要保存的部分进行分组,例如:
echo " ytmti (192.188.2.3) jjggy" | sed 's:^.*(\([^)]*\).*$:\1:'
请注意,我使用[^)]*
它避免了对 IP 进行硬编码并将其推广到其中任何一个。它产生:
192.188.2.3
答案2
在中使用字段分隔符变量awk
:
echo "ytmti (192.188.2.3) jjggy" | awk -F'[)(]' '{print $2}'
192.188.2.3
答案3
你还可以这样做:
echo 'ytmti (192.188.2.3) jjggy' | tr -dc '0-9.'