文本处理三剑客命令初探
sed
语法
sed 选项 "定位+命令" 文件路径 流式编辑器,主要擅长对文件的编辑操作,我们可以事先定制好编辑文件的命令,然后让sed 自动完成对文件的整体编辑
选项
-n 取消默认输出 -r 支持扩展正则元字符 -i 立即编辑文件
定位
行定位
1 定位到第一行 1,3代表从第一行到第三行 不写定位代表定位所有行
正则表达式定位
/egon/ 包含egon的行 /^egon/ 以egon开头的行 /egon$/ 以egon结尾的行
数字加正则表达式定位
1,8p 代表打印1到8行
1,/egon/p 则代表取从第一行到首次匹配到/egon/的行
命令
a 新增,a的后面可以接字符串,而这些字串会在新的一行出现(目前的下一行) c 取代,c的后面可以接字串,这些字串可以取代n1,n2之间的行 d 删除,因为是删除啊,所以d后面通常不接任何咚咚 i 插入,i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行) p 打印,亦即将某个选择的数据印出。通常phi与参数sed -n 一起运行~ s 取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如1,20s/old/new/g 就是啦
awk
awk主要用于处理有格式的文本,例如/etc/passwd这种
用法
awk 选项 'pattern{action}' 文件路径
选项
-F 指定分隔符
工作流程
awk -F '{print $1,$3}' /etc/passwd 1、awk会读取文件的一行内容然后赋值给$0 2、然后awk会以-F指定的分隔符将该行切分成 n 段,最多可以达到 100段,第一段给$1,第二段给$2,依次类推 3、print输出该段的第一段和第三段,逗号代表输出分隔符,默认与-F保持一致 4、重复步骤1,2,3直到文件内容读完
内置变量
$0 一整行内容
NR 记录号,等同于等号
NF 以-F分隔符分割的段数
pattern可以是
正则
/正则/ # 该行内容匹配成功正则 $1 ~ /正则/ # 第一段内容匹配成功正则 $1 !~ /正则/ #第一段内容没有匹配成功正则
比较运算
NR >= 3 && NR <=5 #3到5行 $1 == 'root' #第一段内容等于root
action可以是
print $1,$3
grep
grep 擅长过滤内容
grep也支持管道,我们可以发现三剑客命令都支持管道
用法
grep 选项 '正则' 文件路径
选项
-n 在过滤出的每一行前面加上它在文件中的相对行号 -i 忽略大小写 -color 颜色 -l 如果匹配成功,则只将文件名打印出来,失败则不打印 通常-rl 一起用,grep -rl 'root' /etc -R.-r 递归
示例
[root@localhost ~]# grep '^root' /etc/passwd root:x:0:0:root:/root:/bin/bash [root@localhost ~]# grep -n 'bash$' /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 44:egon:x:1000:1000:egon:/home/egon:/bin/bash [root@localhost ~]# grep -rl 'root' /etc