如何从线上删除图案但返回剩下的内容?

如何从线上删除图案但返回剩下的内容?

如果我运行ip addr sho | grep 9000它会返回我需要快速统计信息的界面:

eth3: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 9000 qdisc mq state UP qlen 1000

但是,我想了解如何使这个 grep 命令返回更短的行,而没有不必要的细节,例如:

eth3: mtu 9000 state UP

这可以通过应用于 grep 命令的某些参数来完成吗?

答案1

awk解决方案。查找包含 eth 的行,后跟数字,后跟 :,然后打印相关列。

$ ip a s | awk '/eth[0-9]*:/{print $2,$4,$5,$8,$9}'
eth0: mtu 1460 state UP
$

sed解决方案,尽管有人会指出有一个更甜蜜+更短的方法。

$ ip a s | sed -n 's/^.*\(eth[0-9]*:\).*\(mtu [0-9]*\).*\(state [A-Z]*\).*/\1 \2 \3/p'
eth0: mtu 1460 state UP
$

grep+cut解决方案。

$ ip a s | grep -E 'eth[0-9]+:' | cut -f2,4,5,8,9 -d" "
eth0: mtu 1460 state UP
$

相关内容