[Linux] xargsコマンドを使うと改行を取り除いてくれる

Software Designを毎月購読しているのですが、忙しかったり、他の本を読んでいたりで今頃2017年11月号を読んでいます。 シェルスクリプトのコーナーを読んでいたのですが、面白い使い方が乗っていました。 xargsコマンドを引数なしで使うと改行を取り除いてくれる。 tcpdumpコマンドを使うと、パケットを表示する事ができます。 ```bash `gutter:false; $ sudo tcpdump -x -c 1 icmp 2> /dev/null 21:37:45.625664 IP 192.168.1.13 > nrt12s02-in-f163.1e100.net: ICMP echo request, id 51725, seq 39, length 64 0x0000: 1cb1 7ffa 721e 8c85 90c3 9505 0800 4500 0x0010: 0054 394d 0000 4001 e1c8 c0a8 010d d83a 0x0020: c5a3 0800 fcc5 ca0d 0027 5ae8 5f99 0009 0x0030: 8b77 0809 0a0b 0c0d 0e0f 1011 1213 1415 0x0040: 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 0x0050: 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 0x0060: 3637 ``` -xで16進数表示、-c 1で1つパケットを表示したら終了します。 xargsコマンドを使うと改行を取り除いてくれるので、組み合わせるとtcpdumpの結果から16進数の部分のみ取り出す事ができます。 ```bash `gutter:false; $ sudo tcpdump -x -c 1 icmp 2> /dev/null | grep $'\t' | sed 's/.*://' | xargs 1cb1 7ffa 721e 8c85 90c3 9505 0800 4500 0054 6ee4 0000 4001 ac31 c0a8 010d d83a c5a3 0800 738d ca0d 001b 5ae8 5f8d 0009 14c8 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637 ``` 同じように/dev/urandomからランダムな5桁の数値を取り出すには、以下のようにできます。 ```bash `gutter:false; $ cat /dev/urandom | strings | grep -oE "[0-9]" | head -n 5 | xargs | sed 's/ //g' 95669 ``` xargsが改行を取り除いてくれる事を知っていると色々活用できそうです。

0 件のコメント :

コメントを投稿