使用 sed 提取文本无法按预期工作

使用 sed 提取文本无法按预期工作

我刚刚开始使用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

注意:ytmtiand实际上是andjjggy等文本的替代品。Pinging unix.stackexchange.comwith 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.'

相关内容