ifconfig
1行に複数の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を維持します。
最後に予約されたスペースをインポートしてフォーマットして印刷します。