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

2023-12-13 20:57:18
筛选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 , 会发现所有内容都输出, 且匹配的内容出现两遍

文章来源:https://blog.csdn.net/kfepiza/article/details/134727819
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。