編集する

編集する

私はしばしば行とインデントを理解する必要があります。たとえば、インデントされた行番号を知っている場合は、次のようにこれを達成できます。

$ lspci -vq | grep -i wireless -B 1 -A 5

    02:00.0 Network controller: Intel Corporation Wireless 7260 (rev 73)
        Subsystem: Intel Corporation Wireless-N 7260
        Flags: bus master, fast devsel, latency 0, IRQ 64
        Memory at c0600000 (64-bit, non-prefetchable) [size=8K]
        Capabilities: <access denied>

たとえば、次のコマンドの出力には1つの無線LAN情報のみを含めることができ、すべての情報を含めることはできません。

$ sudo iwlist wlan0 scan | grep -i "cell 13" -A 34
          Cell 13 - Address: 00:1A:2B:93:A7:9C
                    Channel:6
                    Frequency:2.437 GHz (Channel 6)
                    Quality=20/70  Signal level=-90 dBm  
                    Encryption key:on
                    ESSID:"NetMASTER Uydunet-E445"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s
                              24 Mb/s; 36 Mb/s; 54 Mb/s
                    Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 48 Mb/s
                    Mode:Master
                    Extra:tsf=0000005b923c8227
                    Extra: Last beacon: 4648ms ago
                    IE: Unknown: 00164E65744D415354455220557964756E65742D45343435
                    IE: Unknown: 010882848B962430486C
                    IE: Unknown: 030106
                    IE: Unknown: 050400010000
                    IE: Unknown: 2A0100
                    IE: Unknown: 2F0100
                    IE: Unknown: 32040C121860
                    IE: Unknown: 2D1A2C181BFF00000000000000000000000000000000000000000000
                    IE: Unknown: 3D1606080400000000000000000000000000000000000000
                    IE: Unknown: DD090010180201F00C0000
                    IE: WPA Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    IE: Unknown: DD180050F2020101800003A4000027A4000042435E0062322F00
          Cell 14 - Address: 90:F6:52:90:C2:2F
                    Channel:6
                    Frequency:2.437 GHz (Channel 6)
                    Quality=21/70  Signal level=-89 dBm  
                    Encryption key:on
                    ESSID:"selma"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                              9 Mb/s; 12 Mb/s; 18 Mb/s

1つのメッセージのみを含むようにこの出力を切り捨てるにはどうすればよいですかCell

編集する

ジョブスクリプトは次の場所に保持されます。https://github.com/ceremcem/sgrep

ベストアンサー1

一致する章のタイトルに基づくソリューション

Cell 13で始まるが前に終わるテキストを印刷するには、次をCell 14使用します。

sudo iwlist wlan0 scan | awk '/Cell 13/{f=1} /^ *Cell 14/{f=0} f'

インデントレベルモニタリングベースのソリューション

これにより、次を含む行で始まるCell 13すべての行が印刷されます。大きいインデントレベル:

sudo iwlist wlan0 scan | awk '/Cell 13/ && !f{f=1;x=$0;sub(/[^ ].*/,"",x);x=x" ";print;next} f {if (substr($0,1,length(x))==x)print; else f=0}'

仕組み:

このコードは2つの変数を使用します。 f印刷したいセクションにある場合は1、それ以外の場合は0のフラグです。文字列は、x印刷したいセクションの先頭のインデントよりも1つのスペースを大きく設定します。

  • /Cell 13/ && !f{f=1;x=$0;sub(/[^ ].*/,"",x);x=x" ";print;next}

    (またはセクションの先頭を表すすべての項目を含む行を探しますCell 13。行が一致し、まだセクションにない場合は、次のようにします。

    1. f1に設定します。

    2. 文字列は行のx先頭のインデントに設定されます。

    3. ラインが印刷されます。

    4. 残りのコマンドはスキップしてそのnext行に移動します。

  • f {if (substr($0,1,length(x))==x)print; else f=0}

    印刷するセクションの内側(ゼロ以外)にある場合は、インデントfレベルが確認されます。インデントが最小の場合は、xこの行を印刷します。それ以外の場合は、設定を渡すとセクションの終わりに達したことを意味しますf=0

おすすめ記事