Linux文本处理三剑客(grep、sed、awk)及正则表达式(下)
2020-03-06 18:55
417 查看
3.2、三剑客之sed
用法: sed [OPTION]… {script-only-if-no-other-script} [input- file]
常用指令参数:
p: 输出当前模式空间的内容
a: 在指范围后追加内容,可用\n实现多行追加
=:显示行号
i:在指定范围前插入内容,可用\n实现多行插入
s:代替。(substitute)s///g、s###g、s@@@g 注意:g表示全局替换
c:替换
常用选项参数:
w:保存到指定文件
-r:支持扩展正则表达式
-e:允许多项编辑
-i:直接编辑源文件
-n :取消静默输出。只显示匹配处理的行
注意:-ni选项会将文件内容清空
增:
//在第一行后追加add [root@localhost ~]# sed '1aadd' test2.txt //在最后一行后追加add [root@localhost ~]# sed ' $ aadd' test2.txt //在末添加多行内容 [root@localhost ~]# sed '$aadd\nnidaye' test2.txt //在A行后面添加B并且在C行后面添加D [root@localhost ~]# sed -e'/A/aB' -e '/C/aD' test.txt
删:
//删除第3行的内容 [root@localhost ~]# sed '3d' test.txt //删除第3到7行的内容 [root@localhost ~]# sed '3,7d' test.txt //删除有sb的行 [root@localhost ~]# sed '/sb/d' test.txt //只删除第3行和第5行 [root@localhost ~]# sed '3d;5d' test.txt //删除空行 [root@localhost ~]# sed '/^$/d' test.txt //删除sb的行 [root@localhost ~]# sed 's/sb//g' test.txt
查:
//不打印第一行的内容 [root@localhost ~]# sed -n '1!p' test2.txt //打印1到3行的内容 [root@localhost ~]# sed -n '1,3p' test2.txt //找出有A或者B的行 [root@localhost ~]# sed -n '/A/p;/B/p' test.txt //打印IP地址【反向引用(只要括号里的内容)】 [root@localhost ~]# ip a s ens33|sed -n '3p'|sed -r 's#^.*net(.*)#\1#g'|sed -r 's#(.*)/24.*#\1#g' [root@localhost ~]# ip a s ens33|sed -n '3p'|sed -r 's#^.*net (.*)/24.*#\1#g' [root@localhost ~]# ip a s ens33|sed -nr '3s#^.*net (.*)/24.*#\1#gp'
改:
//替换第七行内容 [root@localhost ~]# sed '7c SELINUX=Disabled' /etc/selinux/config //men改为man [root@localhost ~]# sed 's/men/man/g' test.txt //修改原文件前自动备份(在当前目录下会自动生成一个test.txt.bak的文件) [root@localhost ~]# sed -ri.bak 's/dilireba/nidaye/g' test.txt //批量重命名文件 [root@localhost tet]# ls bab*.txt|sed -r 's/(.*)txt/& \1jpg/g' bab0.txt bab0.jpg
3.3、三剑客之awk
用法: awk [参数] ‘[!]模式-动作’ 文件
常用选项:
-F:指定字段分隔符
-v:自定义变量
内置变量:
NF:字段总数量,$NF表示最后一个字段
NR:行数
FS:输入行字段分隔符
$(NF-n):去倒数第几列
模式匹配符:
~:匹配
!~:不匹配
//找出第2行的内容 [root@localhost ~]# awk 'NR==2' test.txt //找出第2到第4行的内容 [root@localhost ~]# awk 'NR==2,NR==4' test.tx //仅找出第2和第4行的内容 [root@localhost ~]# awk 'NR==2;NR==4' test.txt //-------------------打印有BB的行 [root@localhost ~]# awk '/BB/{print $2$3}' test.txt 546345:325423534:324:213 //连在一起 [root@localhost ~]# awk '/BB/{print $2,$3}' test.txt //加个逗号以空格分开 546345 :325423534:324:213 [root@localhost ~]# awk '/BB/{print $2","$3}' test.txt //以逗号分隔 546345,:325423534:324:213 [root@localhost ~]# awk '/BB/{print $2','$3}' test.txt //懵逼了 546345 :325423534:324:213 //-----------------------------数值减掉了1 [root@localhost ~]# awk -F"[ :]+" '{print $5-1}' test.txt 23441 63455 [root@localhost ~]# awk -F"[ :]+" '{print $(5-1)}' test.txt //打印倒数第2列 34242 435345 [root@localhost ~]# //只匹配第3列以123开头的行 [root@localhost ~]# awk '$3~/^123/{print $1,$2,$3}' test.txt //第3列匹配以1或5结尾的行 [root@localhost ~]# awk '$3~/(1|5)$/{print $1,$2,$3}' test.txt 3dilireba sad 2353571235 4jxj sada 123546345 [root@localhost ~]# awk '$3~/[15]$/{print $1,$2,$3}' test.txt 3dilireba sad 2353571235 4jxj sada 123546345 [root@localhost ~]# awk '$3~/[15]$/{print $1,$2}' test.txt //把$3去掉就不显示第3列了 3dilireba sad 4jxj sada //在匹配到的行把:替换为_ [root@localhost ~]# awk '$1~/jxj/{gsub(/:/,"_",$NF);print $NF}' test.txt //统计空行 [root@localhost ~]# awk '/^$/{i++;print i}' /etc/services [root@localhost ~]# awk '/^$/{i++}END{print i}' /etc/services //统计普通用户数量 [root@localhost ~]# awk '$NF~/\/bin\/bash/{i++}END{print i}' /etc/passwd
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- shell中的文本处理正则表达式(grep,sed,awk,linux中三剑客)
- Linux---文本处理(正则表达式,grep,awk,sed)
- Linux基础知识之文本处理工具三剑客之一grep以及正则表达式
- Linux:vi编辑器,正则表达式,文本处理cut、sort、wc、sed、awk,用户权限
- Linux中正则表达式与文件格式化处理命令(awk/grep/sed)
- Linux中正则表达式与文件格式化处理命令(awk/grep/sed)
- linux文本处理三剑客之grep家族及其相应的正则表达式使用详解
- shell脚本之正则表达和文本处理(文本处理三剑客:1、grep 2、sed 3、awk)
- Linux文本处理三剑客之grep及正则表达式
- Linux文本处理三剑客之grep一族与正则表达式
- 文本处理三剑客之grep与正则表达式
- Linux基础之-正则表达式(grep,sed,awk)
- Linux文本处理3大利器sed grep awk
- 文本处理(grep、sed)、正则表达式、vim基础
- 文本处理三剑客之grep&正则表达式
- Linux文本处理三剑客之grep和sed
- linux文本处理 sort,grep,sed,awk,uniq 用法
- Linux文本三剑客超详细教程---grep、sed、awk(中)
- Linux高级文本处理之正则表达式与grep
- Linux的文本处理工具浅谈-awk sed grep