sed を使用してテキストを抽出しても期待どおりに動作しない

sed を使用してテキストを抽出しても期待どおりに動作しない

私はまだ使い始めたばかりsedで、出力から IP アドレスを抽出するためにこれを使用するつもりですping。私が正確に達成しようとしていることは次のとおりです。

入力テキスト:

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は、実際には およびjjggyのようなテキストの代わりとなります。Pinging unix.stackexchange.comwith 32 bytes of data:

awk出力を解析するには を使用する方がよい解決策だと思いますpingが、 に慣れたいと思いますsed

答え1

の置換コマンドは、sed最初のセクションで一致するすべての文字を 2 番目のセクションのすべての文字に置き換えるため、または同様のコマンドが必要になり.*、次のように保存する部分のみをグループ化します。

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

関連情報