[英]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.