0

grep、 ...を使用して2番目または3番目、4番目の段落のみを返す方法はありawkますか?

lo段落を取得するにはどうすればよいですか。コマンドを使用してそれが可能であることはわかってifconfig loいますが、他のコマンドを使用する場合はどうすればよいですか。からの出力ifconfigは次のとおりです。

eth0      Link encap:Ethernet  HWaddr 00:25:22:b2:8b:0d  
          inet addr:192.168.1.22  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::225:22ff:feb2:8b0d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:100979 errors:0 dropped:0 overruns:0 frame:0
          TX packets:70753 errors:0 dropped:0 overruns:0 carrier:1
          collisions:0 txqueuelen:1000 
          RX bytes:129240044 (129.2 MB)  TX bytes:7355272 (7.3 MB)
          Interrupt:29 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
4

3 に答える 3

3

を使用して、段落番号またはインターフェイス名で簡単にフィルタリングできますawk

段落番号については、次のレコードを指定するだけawk 'NR==1' RS=''です。

# First record
$ ifconfig | awk 'NR==1' RS=''
eth0      Link encap:Ethernet  HWaddr 00:25:22:b2:8b:0d  
          inet addr:192.168.1.22  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::225:22ff:feb2:8b0d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:100979 errors:0 dropped:0 overruns:0 frame:0
          TX packets:70753 errors:0 dropped:0 overruns:0 carrier:1
          collisions:0 txqueuelen:1000 
          RX bytes:129240044 (129.2 MB)  TX bytes:7355272 (7.3 MB)
          Interrupt:29 

# Second Record              
$ ifconfig | awk 'NR==2' RS=''
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

レコード番号ではなくインターフェイス名でフィルタリングする場合は、次のようにしますawk '$1=="eth0"' RS=''

# Interface lo
$ ifconfig | awk '$1=="lo"' RS='' 
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

# Interface eth0                                                        
$ ifconfig | awk '$1=="eth0"' RS='' 
eth0      Link encap:Ethernet  HWaddr 00:25:22:b2:8b:0d  
          inet addr:192.168.1.22  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::225:22ff:feb2:8b0d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:100979 errors:0 dropped:0 overruns:0 frame:0
          TX packets:70753 errors:0 dropped:0 overruns:0 carrier:1
          collisions:0 txqueuelen:1000 
          RX bytes:129240044 (129.2 MB)  TX bytes:7355272 (7.3 MB)
          Interrupt:29 

ifconfig eth0しかし、またはの何が問題なのかわかりませんifconfig lo

于 2013-02-21T13:01:06.920 に答える
0

awkで:

BEGIN {
  RS = ""
}

NR == 3 {
  print
  exit
}

これで3番目の段落が印刷されます。「3」を好きなように変更します。Record Separatorを空の文字列に設定すると、awkは通常のように行ではなく段落で機能することに注意してください。

次のように実行できます。

awk -f above.awk input.txt
于 2013-02-21T12:48:15.207 に答える
0

パターン範囲を使用して、これがを使用する1つの方法sedです。また、最後の空の行も削除されます。

ifconfig | sed -n '/^lo/,/^$/ { /^$/!p }'

awk解決策:

ifconfig | awk '$1=="lo"' RS=
于 2013-02-21T12:56:53.193 に答える