三剑客(grep sed awk)

三剑客(grep sed awk)

1 grep

用于文本过滤

使用格式:grep [选项] '正则表达式'

选项

-P:使用perl正则表达式
-i:ignorecase
-v:反转搜索,找到未匹配的行

2 sed

sed是一个流编辑器,会逐行读取文件内容,并逐行进行选取、替换、删除、新增等操作。

使用格式:sed [选项] '[动作]' 文件名

选项

-e:允许对输入数据应用多条sed命令编辑
-f 脚本文件名:从sed脚本中读入sed操作
-i:用sed的修改结果直接修改读取数据的文件(危险操作)
-h:显示帮助
-n:一般sed命令会把所有数据都输出到屏幕,如果加入此选项,则只会把经过sed命令处理的行输出到屏幕
-r:在sed中支持扩展正则表达式
-V:显示版本信息

动作

动作包括三部分:定位、操作、内容。

定位:

空地址 // 全文处理
单地址 // 匹配指定行
/pattern/    // 正则匹配
范围地址 // 10,20 十到二十行, 10,+5 十行向下五行, /pattern1/,/pattern2/ 匹配的两行正则之间的内容
步长 // 1~2 奇数, 2~2 偶数

操作:

a \:追加, 在当前行后添加一行或多行,添加多行时,除最后一行外,每行末尾都需要用'\'代表数据未完结
c \:行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾都需要用'\'代表数据未完结
d :删除,删除指定行
i \:插入,在当前行前插入一行或多行,插入多行时,除最后一行外,每行末尾都需要用'\'代表数据未完结
p:打印;sed -n '/root/p':只打印包含 root 的行;/***/中的内容表示正则匹配语法脚本
s :替换,sed -e '3s/old/new/g':将第三行中的old 替换为 new,g 代表全局替换;'/'可以换成 '#','@'等

内容:

即操作后面对应的内容。

例如:读取ens33网卡中的ip信息

$ ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.17.134  netmask 255.255.255.0  broadcast 192.168.17.255
        inet6 fe80::78f:d127:e696:8c98  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:51:7b:40  txqueuelen 1000  (Ethernet)
        RX packets 17804  bytes 8874697 (8.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1321  bytes 142574 (139.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
$ ifconfig ens33 | sed -e '2s/ *inet *//' -e '2s/ *netmask.*//p' -n
192.168.17.134

3 awk

作用:把文件逐行读入,以空格为默认分割符,将每行切片,切开的部分再进行后续处理

使用格式:awk [选项] '定位{动作}'

awk [选项] '/正则表达式/ 动作' [文件]

  • pattern:正则表达式
  • action:对匹配到的内容执行的命令(默认为输入每行内容)

选项

参数解释
-F指定分隔符
-v定义或修改变量
-f从脚本读取awk命令

定位

变量:

内置变量解释
$0整行记录
$n当前行的第n个域(从1开始计数)
NF浏览记录的域的个数(列数)
NR已读的记录数(当前处理行的行数)
FNR文件内已读的记录数。(多个文件时,不同文件内正在处理的行号)
FS设置输入域分割符,等价于命令行 -F 参数。默认为空格
OFS输入记录分割符。默认为空格
RS控制记录分割符(输入换行符)
ORS输入记录分割符(输出换行符)
FILENAME当前文件名
ARCG命令行参数个数
ARGV数组,保存命令行给定的各参数
BEGIN处理文本前要执行的操作
END处理文本后要执行的动作

例如:看第五行到第七行'NR==5,NR==7{print $0}'

自定义变量

awk可以自定义变量。如:awk -v myname="liff" 'BEGIN{print myname}'
也可以调用系统变量。如:awk -v mypath=$PATH 'BEGIN{print mypath}'

awk可以根据NR参数配合条件判断符号进行组合筛选特定的行,如:筛选大于3的行NR>3
也可以采用正则匹配。
如:匹配正则:x~/正则/
不匹配正则:x!~/正则/

动作

打印print和格式化打印printf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值