簡體   English   中英

如何在Linux中跨多行查找模式?

[英]How to find patterns across multiple lines in Linux?

我正在嘗試獲取此命令的一些特定行:

ifconfig

這是命令的輸出:

eth0      Link encap:Ethernet  HWaddr 00:10:E0:3F:6F:BC  
          inet addr:10.71.1.30  Bcast:10.71.1.255  Mask:255.255.255.0
          inet6 addr: fe80::210:e0ff:fe3f:6fbc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3059275068 errors:0 dropped:1378 overruns:0 frame:0
          TX packets:2094779962 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:6566542892239 (5.9 TiB)  TX bytes:202791652910 (188.8 GiB)

eth1      Link encap:Ethernet  HWaddr 00:10:E0:3F:6F:BD  
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:1417584931 errors:0 dropped:32908 overruns:0 frame:0
          TX packets:1284691038 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2256566826674 (2.0 TiB)  TX bytes:182643225952 (170.0 GiB)

我只想要包含“鏈接”和“字節”字樣的行,例如:

eth0      Link encap:Ethernet  HWaddr 00:10:E0:3F:6F:BC 
RX bytes:6566542892239 (5.9 TiB)  TX bytes:202791652910 (188.8 GiB)
eth1      Link encap:Ethernet  HWaddr 00:10:E0:3F:6F:BD
RX bytes:2256566826674 (2.0 TiB)  TX bytes:182643225952 (170.0 GiB)

最好的方法必須是使用grep來過濾行。 例如,使用:

ifconfig | egrep " Link|bytes"

注意我在Link之前添加了一個空格,以避免匹配以Scope:Link結尾的行。

您還可以使用:

ifconfig | awk '/ Link/ || /bytes/'

要么

ifconfig | grep " Link\|bytes"

當然, grep是實現此目的的最佳工具。 但是,還有其他一些方法可以執行相同操作。 那是,

ifconfig | sed -n '/Link \|bytes/p'

ifconfig | awk '/Link |bytes/'
ifcofig|perl -lne 'print if(/Link/||/bytes/)'

這是我遇見的大多數人似乎都不了解的幾個有用的模式。 第一個與您的問題特別相關。

grep -e是您最好的新朋友

ifconfig | grep -e Link -e bytes

您可以使用sed做類似的事情,它還具有打印第一行(可能包含標題)的額外好處。 在此示例中,我正在打印標題行,並且任何行都包含LISTEN或'bar'(第二個表達式只是為了強調這一事實,即您不限於一個。)在這里,1p指向第一個行(origin-1),對'p'rint進行操作

lsof -Pni | sed -n -e 1p -e '/LISTEN/p' -e '/bar/p'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM