2017-03-02 8 views
0

リースIP「192.168.21.100」、ハードウェアイーサネット「14:10:9f:f2:1d:00」とクライアントホスト名「2015cmoran-2」を抽出する必要があります。 。複数の行を1つにまとめて単語を抽出するAwk unix

そしてそれは、この

"192.168.21.100" のように1行にする必要があり、 "14:10:9F:F2:1D:00"、 "2015cmoran-2"

lease 192.168.21.100 { 
starts 4 2017/03/02 05:43:15; 
ends 4 2017/03/02 17:43:15; 
cltt 4 2017/03/02 05:43:15; 
binding state active; 
next binding state free; 
rewind binding state free; 
hardware ethernet 14:10:9f:f2:1d:00; 
uid "\001\024\020\237\362\035\000"; 
client-hostname "2015cmoran-2"; 
} 
server-duid "\000\001\000\001 IL\264x\243Q\031O\032"; 

私はこれらを行っているが、私は、これはこのを含む行を絞り込むになること

cat /var/dhcpd.leases | sed 's/;//g' | sed 's/"//g' | awk '{for (I=1;I<=NF;++I) if ($I == "client-hostname") {print $2};}' 

cat /var/dhcpd.leases | sed 's/;//g' | sed 's/"//g' | awk '{for (I=1;I<=NF;++I) if ($I == "ethernet") {print $3};}' 
+0

'cat | sedとsed | awkは共通の反パターンの変種です( 'cat'の無駄な使い方 '(http://www.iki.fi/era/unix/award.html))。 'grep'、' sed'、またはAwkの複数の入力ファイルを同じパイプラインに連結するのでなければ、 'cat'をゼロにする必要があります。 – tripleee

+0

'cat /var/dhcpd.leases | sedの/; // g '| sedの/ "// g"は 'sed '/ [;"] // g'/var/dhcpd.leases'と書くことができます –

答えて

0
x=$(awk -v ORS="," '/lease/||/hardware ethernet/||/client-hostname/{gsub(/{|\;|\"/,"");print "\""$NF"\"" }' inputfile|sed -r 's/(^.*),/\1/') 


echo $x 
"192.168.21.100","14:10:9f:f2:1d:00","2015cmoran-2" 

を行うための正しい方法だとは思いません10の場合、gsubは、{|}|;|"のような文字を除外するために使用されます。これが完了したら、行を印刷します。 ORSがカンマに変更されていることに注意してください。 sedは、ORSからの最後のカンマ記号を除外するために使用されます。

関連する問題