1行に `ifconfig`から複数のIPアドレスを印刷します。

1行に `ifconfig`から複数のIPアドレスを印刷します。

ifconfig1行に複数のIPアドレスを印刷したいです。

これが私が使用しようとしているものです。grep, cut and awk

user@linux:~$ ifconfig | grep ad.*Bc
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          inet addr:10.1.1.1  Bcast:10.1.1.255  Mask:255.255.255.0
user@linux:~$ 

user@linux:~$ ifconfig | grep ad.*Bc | cut -d: -f2
192.168.1.1  Bcast
10.1.1.1  Bcast
user@linux:~$ 

user@linux:~$ ifconfig | grep ad.*Bc | cut -d: -f2 | awk '{ print $1}'
192.168.1.1
10.1.1.1
user@linux:~$ 

残念ながら、私が得ることができる最高の結果は次のとおりです。

192.168.1.1
10.1.1.1

2行で。

このような結果が出ることができますか?

192.168.1.1 , 10.1.1.1

答え1

|tr -s '\n' ','こんにちは、最後に追加してみることができますか?

これは改行文字をカンマで置き換えます。問題は、次の行がないということです。必要に応じて追加できます。

答え2

ただ使用出力レコード区切り記号( ) を awk でORSコンマ ( ) として使用する,

ifconfig | grep ad.*Bc | cut -d: -f2 | awk 'BEGIN{ORS=" , ";} {print $1}' | sed 's#, $##' &&  echo ""

答え3

echo $(ifconfig | grep -o 'addr:[^ ]*' | cut -f2 -d:) | sed 's/ /, /g'                               

grep -oパターンに一致する文字列のみを出力します。このcutコマンドはaddr:プレフィックスを削除します。他のLinuxバージョン(Debianなど)は異なるifconfig出力を持ち、このアドレスに従わないことに注意してくださいaddr:

コマンドの置き換えにより、$( ... )各「単語」をechoの引数として使用して結果を1行に連結します。

最後sedに各スペースを,

答え4

このsedを試すことができます

ifconfig | sed -n '
  $ {
  x
  s/^.//
  s/\n/ , /
  p
}
/.*addr:/!b
  s///
  s/ .*//
  H'

"addr:" ですべての行を保持します。
すべてのエントリを削除し、予約済みスペースにIPを維持します。
最後に予約されたスペースをインポートしてフォーマットして印刷します。

関連情報