三剑客

sed工具

替换指定的字符
命令格式
sed -n '/root/'p passwd 查找含有root的行
在这里插入图片描述
sed -n '/root/'Ip passwd 大写的i,查询出来的内容不区分大小写
在这里插入图片描述
sed -n '/o+t/'p passwd
sed -nr '/o+t/'p passwd
扩展正则选项 -r(类似grep -E),如果不加-r,得使用 \ 脱义
在这里插入图片描述

sed -n '1’p passwd 打印第一行
sed -n '1,5’p passwd 打印1到5行
在这里插入图片描述
sed -e '1’p -e '/root/'p -n passwd 打印第一行以或者含有字符root的行
-e表示满足其中任意一个条件的行
在这里插入图片描述
打印出没有的root的行,d参数
在这里插入图片描述
sed -i '1’d passwd 删除第一行
sed -i '/root/'d passwd 删除root相关的行
加上-i参数会从文件中删除相关的行
在这里插入图片描述

sed ‘1,10s/tx/xt/g’ passwd 查找替换,g参数表示范围,达到全局替换。
在这里插入图片描述
sed -r ‘s/(xt)(.*)(bash)/\3\2\1/’ passwd
在这里插入图片描述

sed 's/[a-zA-Z]// 'g passwd 打印文档并不显示文档中的字母
在这里插入图片描述
sed -r ‘s/(.*)/aaa:&/’ passwd 在所有的行前面加上aaa:,&号表示(.*)
在这里插入图片描述

awk工具

awk -F ‘:’ ‘{print $1}’ passwd
指定分隔符:,把第一段打印出来。$0表示所有段
如果不指定分隔符,将会以空格做为分隔符
在这里插入图片描述
awk '{print $0}' passwd $0表示所有段
在这里插入图片描述
awk ‘/tx/’ passwd 打印符合root行
在这里插入图片描述
awk -F ‘:’ '$1 ~ /tx/’ passwd 打印第一段包含tx的行
在这里插入图片描述
awk -F ‘:’ ‘$1==“tx”’ passwd打印第一列为tx的行
在这里插入图片描述
awk -F ‘:’ ‘KaTeX parse error: Double superscript at position 257: … awk -F : ':' '̲/root/ {print `1,$2} /user/ {print$3,$4}' passwd 把匹配root或者user的数据打印出指定的列 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190412093826828.png) awk -F ':' '/tx|ftp/ {print$0}' passwd 打印匹配tx或者ftp的数据 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190412093729371.png) awk -F ':' '$3==1000 {print$1}' passwd 打印第三段等于1000的行的第一列 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190412094102280.png) awk -F ':' ‘$3>=1001 {print $1}’passwd 打印第三段大于等于1000的行 当为"1000"时,表示为ASCII码 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190412094207875.png) awk -F ':' '$7!="/sbin/nologin" ' passwd 打印第七段不为/sbin/nologin的行 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190412094400975.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0NTg0Ng==,size_16,color_FFFFFF,t_70) awk -F ':' '$3=$4' passwd 一个等号表示赋值,两个等号表示等于 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019041209495243.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0NTg0Ng==,size_16,color_FFFFFF,t_70) awk -F ':' '$3>1000 || $7 ~ /bash' passwd 打印出第三段大于1000$7~ /bash 表示第七段包含/bash ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190412095202705.png) head -5 /etc/passwd | awk -F ':' '{OFS="#"} {print $1,$2`}’
指定打印的列用#号分隔
在这里插入图片描述

NR表示行数
NF表示段数
awk -F ‘:’ ‘NR<=10’ passwd 打印前十行
awk -F ‘:’ ‘NR<10 {print NR":"$0}’ passwd
在这里插入图片描述
awk -F ‘:’ ‘NR<10 && $1 ~ /root|nologin/ {print NR":"$0}’ passwd
NR表示行数
NF表示段数
在这里插入图片描述
tail passwd | awk -F ‘:’ ‘{print $NR":"$NF}’
NR - Number of Record - 当前处理的行是第几行(因为awk是流处理工具,一行一行处理的,所以NR在不停的自增1)
FNR - File Number of Record - 当前处理的行是当前处理文件的第几行
NF - Number of Fileds - 当前行有多少列数据(这个在每行都会根据设定的分割符重新计算,默认分割符是任意连续的多个空白符)
(NRFNR) 大致等效于 (ARGIND1) , 一般用来判断是不是在处理第一个文件。
但区别是: 前者是判断当前处理的总行数跟文件内行数相等,而这种情况一般都是在第一个文件上,而ARGIND1是参数位置第1的文件时生效。—— 但,如果前面的文件是空的,那么NRFNR就生效于第一个非空文件,而ARGIND1不会。这微妙的区别使它们可以应用于不同的需要。
在这里插入图片描述
awk -F ‘:’ ‘$1=“root”’ passwd
在这里插入图片描述
awk -F ‘:’ ‘{(tot=tot+$3)};END{print tot}’ /etc/passwd
在这里插入图片描述
awk -F ‘:’ '{if($1
"root"){print $0}}’ passwd
在这里插入图片描述

课堂笔记

awk语法结构:
awk -F ‘:’ ‘BEGIN{语句}{if(条件){语句1;语句2;语句3}} END{语句}’ filename

打印某行到某行之间
sed -n '/tns/./user1/'p filename

sed转换大小写,\b[a-z] 表示一个字符组的开头,[a-z] \b表示一个字符组的结尾
\u变大写,\l变小写(小写的L)
sed 's/\b[a-z]/\u&/'g passwd

sed在某一行最后面添加数字
sed -r ‘s/(^a.)/\1 12/’ filename \1表示第一个小括号里的内容
sed -r 's/(^a.
)/& 12/’ filename

打印1到100含有某个字符的行
sed -n '1,100{/abc/}'p filename

awk使用外部的shell变量
a=2; awk -F ‘:’ -v n1=$a '{print KaTeX parse error: Expected 'EOF', got '}' at position 3: n1}̲' passwd sed调用…v/“p passwd,需要用”

awk合并一个文件

把一个文件的多行变成一行
方法一:
a=cat file;echo $a
方法二:
awk ‘{printf("%s ",$0)}’ file
方法三:
cat file |xargs

awk中gsub函数的使用
awk ‘gsub(/www/,“abc”)’ /etc/passwd // passwd文件中把所有www替换为abc
awk -F ‘:’ ‘gsub(/www/,“abc”,$1) {print $0}’ /etc/passwd // 替换$1中的www为abc

awk 截取指定多个域为一行
用awk指定分隔符把文本分为若干段。如何把相同段的内容弄到一行?
以/etc/passwd为例,该文件以":"作为分隔符,分为了7段。
for i in seq 1 7
do
awk -F ‘:’ -v a=$i ‘{printf $a " "}’ /etc/passwd
echo
done

过滤两个或多个关键词
grep -E ‘123|abc’ filename // 找出文件(filename)中包含123或者包含abc的行
egrep ‘123|abc’ filename //用egrep同样可以实现
awk ‘/123|abc/’ filename // awk 的实现方式

awk用print打印单引号
awk ‘BEGIN{print "a’"’"‘s"}’
awk ‘BEGIN{print "a’’‘s"}’
awk ‘BEGIN{print “a"s”}’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值