使用 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.'

相關內容