我剛開始使用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.'