分别用 grep,sed,awk 实现文本筛选过滤功能

筛选ip address show的ipv4

ip address show可简写为ip address可简写为ip a

[z@1235eth5 root]$ ip a | grep 'inet\b'
    inet 127.0.0.1/8 scope host lo
    inet 10.12.35.5/8 brd 10.255.255.255 scope global dynamic noprefixroute enp7s0
[z@1235eth5 root]$ ip a | sed '/inet\b/p' -n
    inet 127.0.0.1/8 scope host lo
    inet 10.12.35.5/8 brd 10.255.255.255 scope global dynamic noprefixroute enp7s0
[z@1235eth5 root]$ ip a | awk '/inet\>/{print}'
    inet 127.0.0.1/8 scope host lo
    inet 10.12.35.5/8 brd 10.255.255.255 scope global dynamic noprefixroute enp7s0
ip a | grep 'inet\b'
ip a | sed '/inet\b/p' -n
ip a | awk '/inet\>/{print}'

也可不写{}, 当没有大括号{}时, 相当于有{print $0}={print}

ip a | awk '/inet\>/{print $0}'
ip a | awk '/inet\>/{print}'
ip a | awk '/inet\>/'

测试时, \b在awk中不起作用, 使用了\>代替

在正则中,

  • \b 表示单词边界
  • \< 表示单词开始边界
  • \> 表示单词结束边界

awk分gawk,mawk等
在Ubuntu2204Desktop版中, awk \b\> 都不起作用, 原因是使用了 mawk . Ubuntu2204Server默认用的是 gawk , 也能用 mawk
Fedora39的awk是gawk




ip a | sed '/inet\b/p' -n

也可写成

ip a | sed -n '/inet\b/p'

-n 是不输出过滤前的内容, p是输出过滤匹配的行 ;

  • 如果只有-n , 那就什么都看不到
  • 如果只有 p , 会发现所有内容都输出, 且匹配的内容出现两遍

你可能感兴趣的:(#,Linux,CentOS,Ubuntu,等,文本,正则RegExp,服务器,linux,运维)