最新要闻
- 天天热讯:巨轮智能:公司近期经营情况正常 内外部经营环境未发生重大变化
- 美国《国家地理》回应传闻:不会停刊、不影响内容质量
- 新西兰升级禁塑令:违者将被罚款44万元 世界速递
- 中外合作办学 授予中、英学士学位 凯里学院这个专业计划招生120人
- 终结日本队5连冠!中国女篮时隔12年再得亚洲杯冠军
- 惠普发布新款游戏显示器:2K IPS屏、240Hz高刷|播资讯
- 全球简讯:泰州市召开“泰惠农•金融服务乡村振兴”农业农村重大项目专题对接会
- 【全球新视野】问界M5智驾版发布全新OTA升级 加入全新智驾领航辅助等功能
- 真世界霸主!任天堂第一方收入远超索尼、微软
- 6月北京口岸出入境人员突破88万,再创今年出入境流量新高 全球观点
- 特斯拉将采用线控转向技术 Yoke方向盘能否全面普及? 环球要闻
- 20万买“小奔驰”图什么?
- 卷疯了!全新马自达3昂克赛拉正式上市 9.99万到底值不值?_观点
- 中非经贸博览会指定用车,岚图梦想家到底哪里好? 焦点热议
- AMD食言了!说好的显卡性能神技HYPR-RX跳票
- 至高优惠200元 华为MatePad Air 原野绿新色上市开启预售 天天快资讯
手机
光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
- 光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
- 搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
- 视点!美国首位女总统即将诞生?拜登恐怕要提前下岗,美政坛迎来变局?
- 当前速递!用理想仪器实现更好的颗粒 德国新帕泰克亮相CPHI & PMEC China获好评
- 微粒贷怎么申请开通 开通方法如下
- 焦点简讯:心疼!这位40岁的云南缉毒警,已是满头白发
家电
Linux三剑客grep、sed、awk(包括练习题)|环球热推荐
Linux grep、sed、awk(包含练习题)
一、grep
Linux grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。
- 基本用法与常见的正则表达式
grep [options] pattern [files]命令 参数 匹配模式文件数据-i:忽略大小写进行匹配。-v:反向查找,只打印不匹配的行。-n:显示匹配行的行号。-E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。-q 或 --quiet或--silent : 不显示任何信息。-o 或 --only-matching : 只显示匹配PATTERN 部分。`找到mysql有关的行并显示行号`[root@localhost /]# grep "mysql" /tmp/passwd.txt -n49:mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin`找到MYSQL有关的行不区分大小写`[root@localhost /]# grep "MYSQL" /tmp/passwd.txt -i49:mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin`找到不是mysql有关的行`[root@localhost /]# grep "mysql" /tmp/passwd.txt -vroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin`统计还有root行的行数`[root@localhost /]# grep "root" /tmp/passwd.txt -c2---^符号 锚定行的开始 如:"^grep"匹配所有以grep开头的行`^ 以什么开头``找到m开头的行 不区分大小写`[root@localhost /]# grep "^m" /tmp/luffy.txt -iMy qq is 877348180.My name is chaoge.---$符号 锚定行的结束 如:"grep$"匹配所有以grep结尾的行`$ 以什么开结尾`[root@localhost /]# grep "oldboy$" /tmp/luffy.txt -iI am oldboy`找到luffy.txt文件中的空行 "^$"以空开头 以空结尾`[root@localhost /]# grep "^$" /tmp/luffy.txt -n3:5:`找到luffy.txt文件中的非空行`[root@localhost /]# grep "^$" /tmp/luffy.txt -vI am oldboyI like linux.My name is xuxuxu#Our school website is http://xixixi.com`找到luffy.txt文件中的非空非注释行`[root@localhost /]# grep "^$|^#" /tmp/luffy.txt -EvI am oldboyI teach linux.I like python.My qq is 877348180.My name is chaoge.---.符号 表示任意一个字符,有且只有一个,不包含空行`"."点表示任意一个字符,有且只有一个,不包含空行`"匹配出".ac",找出任意一个两位字符,包含s"[root@localhost /]# grep ".s" /tmp/luffy.txt My qq is 877348180.My name is chaoge.Our school website is http:/loldboyedu.com`找到以.结尾的行 直接写.$会被当做任意字符 用\进行转义`[root@localhost /]# grep "\.$" /tmp/luffy.txt -iI teach linux.I like python.My qq is 877348180.My name is chaoge.[root@localhost /]# grep "/bin/bash$" /tmp/passwd.txt -n1:root:x:0:0:root:/root:/bin/bash44:test:x:1000:1000:test:/home/test:/bin/bash45:xiaosang:x:1001:1001::/home/xiaosang:/bin/bash46:biaosang:x:1002:1002::/home/biaosang:/bin/bash`找到passwd.txt文件中以/bin/bash结尾的行,且只显示找到的/bin/bash本身`[root@localhost /]# grep "/bin/bash$" /tmp/passwd.txt -n -o1:/bin/bash44:/bin/bash45:/bin/bash46:/bin/bash---*符号 匹配零个或多个先前字符如:"*grep"匹配所有一个或多个空格后紧跟grep的行[root@localhost /]# grep "boy*" /tmp/luffy.txt I am oldboy#Our school website is http:/loldboyedu.com`贪婪匹配`[root@localhost /]# grep ".*e" /tmp/luffy.txt -oI teI likeMy name is chaogeOur school website is http:/loldboye---[]符号 匹配一个指定范围内的字符,如"[Gg]rep"匹配Grep和grep[root@localhost /]# grep [ib]s /tmp/luffy.txtMy qq is 877348180.My name is chaoge.Our school website is http:/loldboyedu.com[root@localhost /]# grep [a-z] /tmp/luffy.txtI am oldboyI teach linux.I like python.My qq is 877348180.My name is chaoge.Our school website is http:/loldboyedu.com---[^]符号 匹配一个不在指定范围内的字符,如:"[^A-FH-Z]rep"匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行
扩展正则表达式实践
此处使用grep -E 进行实践扩展正则,egrep官网已经弃用
(相关资料图)
+符号`+号表示匹配前一个字符1次或多次,必须使用grep -E 扩展正则`[root@localhost /]# grep "l+" /tmp/luffy.txt -EI am oldboyI teach linux.I like python.Our school website is http:/loldboyedu.com?符号`匹配前一个字符0次或1次``找到文件中包含gd或god的行`[root@localhost /]# grep "go?d" /tmp/test.txt -Egdgod|符号 在正则中表示或者的意思`找到/tmp中txt文件,且名字里包含a或b的字符`[root@localhost /]# find /tmp -name "*.txt" | grep -E "a|b"/tmp/passwd.txt/tmp/my_crontab.txt()符号`将一个或多个字符捆绑在一起,当作一个整体进行处理`[root@localhost /]# grep -E "g(oo|al)d" /tmp/test.txt goodgalda{n,m}匹配a的次数`重复前一个字符各种次数,可以通过-o参数显示明确的匹配过程`[root@localhost /]# grep -E "x{2,4}" /tmp/xuxu.txt xxxxxxxuuuuuuxxxxuuuuxxuu[root@localhost /]# grep -E "x{2,4}" /tmp/xuxu.txt -oxxxxxxxxxxxxx`最多匹配4次`[root@localhost /]# grep -E "x{,4}" /tmp/xuxu.txtxxxxxxxuuuuuuxxxxuuuuxuxxuu`最少匹配4次`[root@localhost /]# grep -E "x{4,}" /tmp/xuxu.txtxxxxxxxuuuuuuxxxxuuuu
二、sed
注意:sed和awk使用单引号,双引号有特殊解释
sed是Stream Editor(字符流编辑器)的缩写,简称流编辑器
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
- 基本语法
sed [options] "{command}[flags]" filename 命令选项内部选项和参数文件命令选项-e script 将脚本中指定的命令添加到处理输入时执行的命令中, 多条件,一行中要有多个操作-f script 将文件中指定的命令添加到处理输入时执行的命令中-n 仅显示script处理后的结果-i 编辑文件内容-i.bak 修改时同时创建.bak备份文件。-r 使用扩展的正则表达式! 取反 (跟在模式条件后与shell有所区别)sed常用内部命令a 在匹配后面添加i 在匹配前面添加p 打印d 删除s 查找替换c 更改y 转换 N D P flags数字 表示新文本替换的模式g: 表示用新文本替换现有文本的全部实例p: 表示打印原始的内容w filename: 将替换的结果写入文件空地址 全文匹配单地址 指定文件某一行/pattern/被模式匹配的每一行范围区间 10,20 十到二十行 10,+5第10行向下5行,/pattern1/,/pattern2/步长1~2,表示1,3,5,7,9行,2~2表示2,4,6,8,10偶数行
- 基本用法
`打印第2、3行`[root@localhost /]# sed "2,3p" /tmp/luffy.txt -nI teach linux.I like python.`打印第一行和下面3行`[root@localhost /]# sed "1,+3p" /tmp/luffy.txt -nI am oldboyI teach linux.I like python.I like linux.`找出有linux的行并打印`[root@localhost /]# sed "/linux/p" /tmp/luffy.txt -nI teach linux.I like linux.`删除第5行至末尾行的内容`[root@localhost ~]# sed "5,$d" /tmp/luffy2.txt -i`s///替换 g表示全局替换`[root@localhost ~]# sed "s/linux/java/g" /tmp/luffy2.txt -i[root@localhost ~]# cat /tmp/luffy2.txt I teach java.I like python.`多次替换`[root@localhost ~]# sed -e "s/java/linux/g" -e "s/python/c++/g" /tmp/luffy2.txt -i[root@localhost ~]# cat /tmp/luffy2.txt I teach linux.I like c++.`在文件第二行后追加一行`[root@localhost ~]# sed "2a good good study" /tmp/luffy2.txt -i[root@localhost ~]# cat /tmp/luffy2.txt I teach linux.I like c++.good good study`在第三行前插入一行`[root@localhost ~]# sed "3i happy every day" /tmp/luffy2.txt -i[root@localhost ~]# cat /tmp/luffy2.txt I teach linux.I like c++.happy every daygood good study`在每一行加上分隔符`[root@localhost ~]# sed "a -------------" /tmp/luffy2.txt -i[root@localhost ~]# cat /tmp/luffy2.txt I teach linux.-------------I like c++.-------------happy every day-------------good good study---------------------------------------`双斜线正则匹配 配合d删除`[root@localhost ~]# sed -e "/^$/d" -e "/^#/d" /tmp/luffy2.txt I teach linux.I like c++.happy every daygood good study[root@localhost ~]# sed "/^$/d;/^#/d" /tmp/luffy2.txt I teach linux.I like c++.happy every daygood good study`取出linux的ip地址` [root@localhost ~]# ifconfig ens33 | sed "2p" -n | sed "s/^.*inet//" | sed "s/net.*$//"192.168.70.14 [root@localhost ~]# ifconfig ens33 | sed -e "2s/^.*inet//" -n -e "2s/net.*$//p" 192.168.70.14
三、awk
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
1,主要的作用:
用来处理文本,将文本按照指定的格式输出。其中包含了变量,循环以及数组。
2,语法
awk [option] "pattern[action]" file ...
awk 参数 ‘条件动作’ 文件
Action指的是动作,awk擅长文本格式化,且输出格式化后的结果,因此最常用的动作就是print 和 printf
3, action动作场景
- $0表示整行
- $NF表示当前分割后的最后一列
- 倒数第二列可以写成$(NF-1)
`打印所有列`[root@localhost ~]# awk "{print $0}" /tmp/awktest.txtxux1 xux2 xux3 xux4 xux5 xux6 xux7 xux8 xux9 xux10 xux11 xux12 xux13 xux14 xux15 xux16 xux17 xux18 xux19 xux20 xux21 xux22 xux23 xux24 xux25 xux26 xux27 xux28 xux29 xux30 xux31 xux32 xux33 xux34 xux35 xux36 xux37 xux38 xux39 xux40 xux41 xux42 xux43 xux44 xux45 xux46 xux47 xux48 xux49 xux50`打印第一列`[root@localhost ~]# awk "{print $1}" /tmp/awktest.txt xux1xux6xux11xux16xux21xux26xux31xux36xux41xux46
4,内置变量
NR 表示当前文件的行数NF 表示当前文件有几列FS 表示当前的列分隔符RS 表示当前的行分隔符OFS 输出字段分隔符ORS 输出记录分隔符
[root@localhost ~]# awk "NR==5{print $0}" /tmp/awktest.txt xux21 xux22 xux23 xux24 xux25 [root@localhost ~]# awk "NR==5, NR ==6{print $0}" /tmp/awktest.txt xux21 xux22 xux23 xux24 xux25 xux26 xux27 xux28 xux29 xux30 `打印第1-3行所有列`[root@localhost ~]# awk "NR==1,NR ==3{print $0}" /tmp/awktest.txt xux1 xux2 xux3 xux4 xux5 xux6 xux7 xux8 xux9 xux10 xux11 xux12 xux13 xux14 xux15`打印行号NR`[root@localhost ~]# awk "{print NR,$0}" /tmp/awktest.txt 1 xux1 xux2 xux3 xux4 xux5 2 xux6 xux7 xux8 xux9 xux10 3 xux11 xux12 xux13 xux14 xux15 4 xux16 xux17 xux18 xux19 xux20 5 xux21 xux22 xux23 xux24 xux25 6 xux26 xux27 xux28 xux29 xux30 7 xux31 xux32 xux33 xux34 xux35 8 xux36 xux37 xux38 xux39 xux40 9 xux41 xux42 xux43 xux44 xux45 10 xux46 xux47 xux48 xux49 xux50[root@localhost ~]# awk "{print $(NF-2),$(NF-1),$NF}" /tmp/awktest.txt xux3 xux4 xux5xux8 xux9 xux10xux13 xux14 xux15xux18 xux19 xux20xux23 xux24 xux25xux28 xux29 xux30xux33 xux34 xux35xux38 xux39 xux40xux43 xux44 xux45xux48 xux49 xux50`ip地址`[root@localhost ~]# ifconfig ens33 | awk "NR==2{print $2}"192.168.70.14
5, 自定义输出
注意:awk,必须 外层单引号,内层双引号
内置变量 $1、$2 都不得添加双引号,否则会识别为文本,尽量别加引号
`使用逗号默认空格分隔`[root@localhost ~]# awk "{print $1,$3,$5}" /tmp/awktest.txt xux1 xux3 xux5xux6 xux8 xux10xux11 xux13 xux15xux16 xux18 xux20xux21 xux23 xux25xux26 xux28 xux30xux31 xux33 xux35xux36 xux38 xux40xux41 xux43 xux45xux46 xux48 xux50[root@localhost ~]# awk "{print "n1: "$1,"n2: "$3,"n3: "$5}" /tmp/awktest.txt n1: xux1 n2: xux3 n3: xux5n1: xux6 n2: xux8 n3: xux10n1: xux11 n2: xux13 n3: xux15n1: xux16 n2: xux18 n3: xux20n1: xux21 n2: xux23 n3: xux25n1: xux26 n2: xux28 n3: xux30n1: xux31 n2: xux33 n3: xux35n1: xux36 n2: xux38 n3: xux40n1: xux41 n2: xux43 n3: xux45n1: xux46 n2: xux48 n3: xux50
6, 功能性参数
-F 指定分割字段符-v 定义或修改一个awk内部的变量-f 从脚本文件中读取awk命令输入分隔符,awk默认是空格,空白字符,英文是field separator,变量名是FS输出分隔符,output field separator,简称0FS
awk模式
关系运算符 含义 用法示例 < 小于 x < y <= 小于等于 x <= y == 等于 x == y != 不等于 x != y >= 大于等于 x >= y > 大于 x > y ~ 与对应的正则匹配则为真 x ~ /正则/ !~ 与对应的正则不匹配则为真 x !~ /正则/ `-F 自定义输入分隔符`[root@localhost ~]# awk -F ":" "NR==1{print $0}" /tmp/passwd.txt root:x:0:0:root:/root:/bin/bash[root@localhost ~]# awk -F ":" "NR==1{print $1}" /tmp/passwd.txt root`还可以用 FS 搭配-v 使用 改变输入分隔符`[root@localhost ~]# awk -v FS=":" "NR==1{print $1}" /tmp/passwd.txt root`使用单个逗号 输出分隔符默认是空格`[root@localhost ~]# awk -F":" "NR==1{print $1,$NF}" /tmp/passwd.txt root /bin/bash`自定义输出分割符号`[root@localhost ~]# awk -F":" "NR==1{print $1,"----------",$NF}" /tmp/passwd.txt root ---------- /bin/bash `OFS 修改默认输出分隔符`[root@localhost ~]# awk -F":" -v OFS="---------" "NR==1{print $1,$NF}" /tmp/passwd.txt root---------/bin/bash `将输出分隔符修改为制表符`[root@localhost ~]# awk -F":" -v OFS="\t" "NR==1{print $1,$NF}" /tmp/passwd.txt root /bin/bash`RS 指定符号为换行符`[root@localhost ~]# awk -v RS=" " "{print NR,$0}" /tmp/awktest.txt1 xux12 xux23 xux34 xux45 xux56 xux67 xux78 xux89 xux910 xux1011 xux11`ORS 将换行符换成自定义符号`[root@localhost ~]# awk -v ORS="--------" "{print NR,$0}" /tmp/awktest.txt1 xux1 xux2 xux3 xux4 xux5 --------2 xux6 xux7 xux8 xux9 xux10 --------3 xux11 xux12 xux13 xux14 xux15 --------4 xux16 xux17 xux18 xux19 xux20 --------5 xux21 xux22 xux23 xux24 xux25 --------6 xux26 xux27 xux28 xux29 xux30 --------7 xux31 xux32 xux33 xux34 xux35 --------8 xux36 xux37 xux38 xux39 xux40 --------9 xux41 xux42 xux43 xux44 xux45 --------10 xux46 xux47 xux48 xux49 xux50--------`BEGIN模式`[root@localhost ~]# awk "BEGIN{print "这是begin模式"} NR==1{print NR,$0}" /tmp/awktest.txt 这是begin模式1 xux1 xux2 xux3 xux4 xux5 `BEGIN模式可以不加文件; awk可以使用自定义变量`[root@localhost ~]# awk -v name="plmm" "BEGIN{print "我喜欢",name}"我喜欢 plmm`ARGV[N] 第一个是awk命令本身 第二个是文件名`[root@localhost ~]# awk "{print ARGV[0],ARGV[1],$0}" /tmp/awktest.txt awk /tmp/awktest.txt xux1 xux2 xux3 xux4 xux5 awk /tmp/awktest.txt xux6 xux7 xux8 xux9 xux10 awk /tmp/awktest.txt xux11 xux12 xux13 xux14 xux15 awk /tmp/awktest.txt xux16 xux17 xux18 xux19 xux20 awk /tmp/awktest.txt xux21 xux22 xux23 xux24 xux25 awk /tmp/awktest.txt xux26 xux27 xux28 xux29 xux30 awk /tmp/awktest.txt xux31 xux32 xux33 xux34 xux35 awk /tmp/awktest.txt xux36 xux37 xux38 xux39 xux40 awk /tmp/awktest.txt xux41 xux42 xux43 xux44 xux45 awk /tmp/awktest.txt xux46 xux47 xux48 xux49 xux50[root@localhost ~]# awk "{print ARGV[0],ARGV[1],ARGV[2],$0}" /tmp/awktest.txt awk /tmp/awktest.txt xux1 xux2 xux3 xux4 xux5 awk /tmp/awktest.txt xux6 xux7 xux8 xux9 xux10 awk /tmp/awktest.txt xux11 xux12 xux13 xux14 xux15 awk /tmp/awktest.txt xux16 xux17 xux18 xux19 xux20 awk /tmp/awktest.txt xux21 xux22 xux23 xux24 xux25 awk /tmp/awktest.txt xux26 xux27 xux28 xux29 xux30 awk /tmp/awktest.txt xux31 xux32 xux33 xux34 xux35 awk /tmp/awktest.txt xux36 xux37 xux38 xux39 xux40 awk /tmp/awktest.txt xux41 xux42 xux43 xux44 xux45 awk /tmp/awktest.txt xux46 xux47 xux48 xux49 xux50`在引用外部变量`[root@localhost ~]# what="我喜欢plmm!!!"[root@localhost ~]# awk -v name=$what "BEGIN{print name}"我喜欢plmm!!!
7, print 和 printf 的区别
printf动作默认不会添加换行符
print 默认添加空格换行符
printf需要指定format;
%d 打印单个ASCII 字符 printf("The character is %c\n",x) 输出: The character is A %d 打印一个十进制数 printf("The boy is %d years old\n",y) 输出:The boy is 15 years old %e 打印数字的e 记数法形式 printf("z is %e\n",z) 打印: z is 2.3e+0 1 %f 打印一个浮点数 printf("z is %f\n", 2.3 * 2) 输出: z is 4.600000 %o 打印数字的八进制 printf("y is %o\n",y) 输出:z is 17 %s 打印一个字符串 print("The name of the culprit is %s\n",$1) 输出:The name of the culprit is Bob Smith
printf修饰符
- -:左对齐,默认右对齐
- +:显示数值符号;printf "%+d"
[root@localhost ~]# awk "{printf $1}" /tmp/awktest.txt xux1xux6xux11xux16xux21xux26xux31xux36xux41xux46[root@localhost ~]# `%s`[root@localhost ~]# awk "{printf "%s\n",$1}" /tmp/awktest.txt xux1xux6xux11xux16xux21xux26xux31xux36xux41xux46[root@localhost ~]# awk "{printf "第一列 %s 第二列 %s 第三列 %s\n",$1,$2,$3}" /tmp/awktest.txt 第一列 xux1 第二列 xux2 第三列 xux3第一列 xux6 第二列 xux7 第三列 xux8第一列 xux11 第二列 xux12 第三列 xux13第一列 xux16 第二列 xux17 第三列 xux18第一列 xux21 第二列 xux22 第三列 xux23第一列 xux26 第二列 xux27 第三列 xux28第一列 xux31 第二列 xux32 第三列 xux33第一列 xux36 第二列 xux37 第三列 xux38第一列 xux41 第二列 xux42 第三列 xux43第一列 xux46 第二列 xux47 第三列 xux48`%d`[root@localhost ~]# awk "BEGIN{printf "%d%d%d%d\n",1,2,3,4}"1234`- +对齐` [root@localhost ~]# awk "{printf "第一列 %-20s第二列 %-20s第三列 %-20s\n",$1,$2,$3}" /tmp/awktest.txt 第一列 xux1 第二列 xux2 第三列 xux3 第一列 xux6 第二列 xux7 第三列 xux8 第一列 xux11 第二列 xux12 第三列 xux13 第一列 xux16 第二列 xux17 第三列 xux18 第一列 xux21 第二列 xux22 第三列 xux23 第一列 xux26 第二列 xux27 第三列 xux28 第一列 xux31 第二列 xux32 第三列 xux33 第一列 xux36 第二列 xux37 第三列 xux38 第一列 xux41 第二列 xux42 第三列 xux43 第一列 xux46 第二列 xux47 第三列 xux48
grep 练习题
`找出root开头的行`[root@localhost ~]# grep "^root" /tmp/passwd.txt root:x:0:0:root:/root:/bin/bash`匹配以root开头或者以mysql开头的行,注意定位锚点`[root@localhost ~]# grep -E "^(root|mysql)" /etc/passwdroot:x:0:0:root:/root:/bin/bashmysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin`过滤出除了root开头的行`[root@localhost ~]# grep -v "^root" /etc/passwdbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologin`统计root出现的次数`[root@localhost ~]# grep "root" /etc/passwd -c2`匹配test用户最多一次 -m`[root@localhost ~]# grep "^test" /etc/passwd -m 1test:x:1000:1000:test:/home/test:/bin/bash`匹配多个文件,列出存在信息的文件名字`[root@localhost ~]# grep "test" /tmp/passwd.txt /etc/passwd /tmp/test.txt -l/tmp/passwd.txt/etc/passwd`显示/etc/passwd文件中不以/bin/bash结尾的行`[root@localhost ~]# grep -v "/bin/bash$" /tmp/passwd.txt bin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin`匹配uid和gid是2,3数字的行`[root@localhost ~]# grep -E "\<[0-9]{2,3}\>" /tmp/passwd.txt mail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologinsystemd-network:x:192:192:systemd Network Management:/:/sbin/nologin`找出文件中,以至少一个空白字符开头,后面是非空字符的行`[root@localhost ~]# grep "^[[:space:]].*" /tmp/luffy2.txt happy every day[root@localhost ~]# grep "^[[:space:]]+[^[:space:]]" /tmp/luffy2.txt -E happy every day [root@localhost ~]# grep -E "^(root|mysql|xiao)" /tmp/passwd.txt root:x:0:0:root:/root:/bin/bashxiaosang:x:1001:1001::/home/xiaosang:/bin/bashmysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologinxiao:x:555:555::/home/www:/shbin/nologinxiao1:x:555:555::/home/www:/shbin/nologin[root@localhost ~]# grep -E "^(root|mysql|xiao)\>" /tmp/passwd.txt root:x:0:0:root:/root:/bin/bashmysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologinxiao:x:555:555::/home/www:/shbin/nologin `找出/etc/init.d/functions文件中的所有函数名`[root@localhost ~]# grep -E "[a-zA-Z]+\(\)" /etc/init.d/functions checkpid() {__kill_pids_term_kill_checkpids() {__kill_pids_term_kill() {__pids_var_run() {__pids_pidof() {daemon() {killproc() {`找出:前面字符与结尾相同的行`[root@localhost ~]# grep -E "^([^:]+).*\1$" /tmp/passwd.txt sync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltnobody:x:99:99:Nobody:/:/sbin/nologinntp:x:38:38::/etc/ntp:/sbin/nologinnfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologinnginx:x:987:981:Nginx web server:/var/lib/nginx:/sbin/nologin
sed 练习题
`将开头是#符号的行和空行删除`[root@localhost ~]# sed -e "/^$/d" -e "/^#/d" /tmp/luffy2.txt I teach linux.I like c++.happy every day good good study`将文本中空行,开头是空格的行替换为#`[root@localhost ~]# sed -e "s/^[[:space:]]/#/g" -e "s/^$/#/g" /tmp/luffy2.txt I teach linux.#I like c++.#happy every day##good good study##`在文本前三行加上@符号` ==用了扩展正则表达式 -r,引用了原文 \1==[root@localhost ~]# sed -r "1,3s/(^.)|(^$)/@\1/" /tmp/luffy2.txt @I teach linux.@@I like c++.happy every day good good study `sed 取ip地址`[root@localhost ~]# ifconfigens33: flags=4163
mtu 1500 inet 192.168.70.14 netmask 255.255.255.0 broadcast 192.168.70.255 inet6 fe80::3a93:caf:b995:b1d6 prefixlen 64 scopeid 0x20 ether 00:0c:29:c0:b0:a1 txqueuelen 1000 (Ethernet) RX packets 13469 bytes 1208013 (1.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 9149 bytes 1040700 (1016.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@localhost ~]# ifconfig ens33 | sed "2s/^.*inet//;2s/netm.*//p" -n 192.168.70.14`sed 找出系统版本`[root@localhost ~]# cat /etc/centos-releaseCentOS Linux release 7.9.2009 (Core)`中括号中间^取反,+贪婪匹配,() \1 扩展正则`[root@localhost ~]# sed -r "s/^.*release[[:space:]]//;s/([^.]+).*/\1/p" /etc/centos-release -n7
awk练习题
`在当前系统中打印用户的用户名和家目录`[root@localhost ~]# awk -F ":" "$3>=1000{print $1,$(NF-1)}" /tmp/passwd.txt nfsnobody /var/lib/nfstest /home/testxiaosang /home/xiaosangbiaosang /home/biaosang`给/tmp/xuxu.txt文件的前五行,添加#号`[root@localhost ~]# awk "NR<6{print "#",$0}" /tmp/awktest.txt # xux1 xux2 xux3 xux4 xux5 # xux6 xux7 xux8 xux9 xux10 # xux11 xux12 xux13 xux14 xux15 # xux16 xux17 xux18 xux19 xux20 # xux21 xux22 xux23 xux24 xux25 `找出/tmp/tel.txt中的电话号码`[root@localhost ~]# cat /tmp/tel.txt Mike Harrington:[510] 548-1278:250:100:175Christian Dobbins:[408] 538-2358:155:90:201Archie McNichol:[206] 548-1348:250:100:175Jody Savage:[206] 548-2788:15 :188:150Dan Savage:[406] 298-7744:450:300:275Nancy McNeil:[206] 548-1278:250:80:75Elizabeth Stachelin:[916] 440-1763:175:75:300[root@localhost ~]# awk -F "[ :]" "!/^$/{print $4}" /tmp/tel.txt 548-1278538-2358548-1348548-2788298-7744548-1278440-1763`找出Mike的电话号码`[root@localhost ~]# awk -F "[ :]" "/^Mike/{print $4}" /tmp/tel.txt 548-1278`找出姓(第二列)以D开头 的信息 利用正则x~/正则/`[root@localhost ~]# awk -F "[ :]" "$2~/^D/{print $0}" /tmp/tel.txt Christian Dobbins:[408] 538-2358:155:90:201`打印Mike最后3行数字,并在千米那加上$`[root@localhost ~]# awk -F "[ :]" "/^[Mike]/{print "$"$5,"$"$6,"$"$7}" /tmp/tel.txt $250 $100 $175`姓名反过来,并在中间用逗号分开`[root@localhost ~]# awk -F "[ :]" "!/^$/{print $2","$1}" /tmp/tel.txt Harrington,MikeDobbins,ChristianMcNichol,ArchieSavage,JodySavage,DanMcNeil,NancyStachelin,Elizabeth[root@localhost ~]# awk -F "[ :]" -v OFS="," "!/^$/{print $2,$1}" /tmp/tel.txt Harrington,MikeDobbins,ChristianMcNichol,ArchieSavage,JodySavage,DanMcNeil,NancyStachelin,Elizabeth`打印非空行`[root@localhost ~]# awk "!/^$/{print $0}" /tmp/tel.txt Mike Harrington:[510] 548-1278:250:100:175Christian Dobbins:[408] 538-2358:155:90:201Archie McNichol:[206] 548-1348:250:100:175Jody Savage:[206] 548-2788:15 :188:150Dan Savage:[406] 298-7744:450:300:275Nancy McNeil:[206] 548-1278:250:80:75Elizabeth Stachelin:[916] 440-1763:175:75:300
关键词:
Linux三剑客grep、sed、awk(包括练习题)|环球热推荐
天天热讯:巨轮智能:公司近期经营情况正常 内外部经营环境未发生重大变化
美国《国家地理》回应传闻:不会停刊、不影响内容质量
新西兰升级禁塑令:违者将被罚款44万元 世界速递
【世界报资讯】IOS开发-实现一个高度自适应的UILabel和一个宽度自适应的UILabel
Kali Linux 配置系统代理_当前热闻
中外合作办学 授予中、英学士学位 凯里学院这个专业计划招生120人
终结日本队5连冠!中国女篮时隔12年再得亚洲杯冠军
惠普发布新款游戏显示器:2K IPS屏、240Hz高刷|播资讯
全球简讯:泰州市召开“泰惠农•金融服务乡村振兴”农业农村重大项目专题对接会
Jar包开发之【有之则用,无之则禁】|世界新要闻
CentOS 9 x64 使用 Nginx、Supervisor 部署 Go/Golang 服务
spring启动流程 (2) Bean实例化流程 世界短讯
【全球新视野】问界M5智驾版发布全新OTA升级 加入全新智驾领航辅助等功能
真世界霸主!任天堂第一方收入远超索尼、微软
6月北京口岸出入境人员突破88万,再创今年出入境流量新高 全球观点
特斯拉将采用线控转向技术 Yoke方向盘能否全面普及? 环球要闻
20万买“小奔驰”图什么?
卷疯了!全新马自达3昂克赛拉正式上市 9.99万到底值不值?_观点
中非经贸博览会指定用车,岚图梦想家到底哪里好? 焦点热议
AMD食言了!说好的显卡性能神技HYPR-RX跳票
至高优惠200元 华为MatePad Air 原野绿新色上市开启预售 天天快资讯
新机蓄势待发!Switch后续机型开发套件或已抵达西班牙-环球观热点
汪小菲“趁火打劫”成功,将接子女回北京,大s妥协原因引热议_全球热头条
大V吐槽极氪倒车影像“骗人”bug:让他撞了两次车
马斯克缺钱?推特限制用户浏览量:不开会员每天只能看1000条_今日视点
动态:硕士被曝制作全校学生颜值打分网站供人查看 人大回应
Python 使用 NetworkX
当前关注:excel图表制作折线图数据选择_excel图表制作折线图
华为智选车将建汽车独立门店 知情人士:经销商加盟 华为话语权更大
20万内仅有的换电SUV来了!吉利睿蓝7即将上市
切比雪夫距离
全球微动态丨日方首度确认!中国两栖攻击舰路过鹿儿岛
俩南方小伙山东旅游点6个菜吃不完 被北方菜“上了一课”-世界短讯
广东一电摩自燃 30辆车被连累烧成空壳!千万别在室内充电
俄罗斯恢复飞往古巴的定期航班
人大金仓学习之一_kwr的简单学习_环球看点
前端Vue基于腾讯地图Api实现的选择位置组件 返回地址名称详细地址经纬度信息|世界焦点
今日要闻!民主测评软件需求分析与实现
6大人争接萌娃放学 最后姥爷赢麻了:画面让网友笑翻-环球快资讯
美国一女子去世7只猫继承217万遗产引热议:上百人抢着领养
公共气象服务中心:预警“叫应”联动服务信息化建设_每日热门
每日看点!选读SQL经典实例笔记01_检索和排序
学霸、体育才女!谷爱凌大一课程全A 曾自称成绩100%自己努力得到的
华硕全球首发RTX 4060 Ti神卡:能扩展M.2 SSD
当前短讯!威马疑又停薪,仅发中高层工资!“讨债大军”攻陷官方微博
国科大校长谈龙芯之母说着说着就哭了:别让“卡脖子”遏制我们发展 当前报道
【WALT】update_window_start() 代码详解
国外RTX 4090销售陷入困境 愁坏了很多零售商
孙女给生活不能自理爷爷洗澡引争议 当事人:孝心不分男女 天天头条
升级iOS 17还要交钱?跟iOS 16对比后拔草了!立省688元
今日播报!Apple Watch新款感知不强!500块的S4最香
做“有温度”的就业指导服务|世界新视野
每日热文:大姨妈不正常怎么办吃什么好呢_大姨妈不正常怎么办
【世界速看料】茅坑里的石头是哪种人_茅坑里的石头是什么意思
【聚看点】go src - sync.Map
环球观天下!Web安全-渗透测试-权限提升01
焦点快报!116-104!山东高速力克北京首钢,山东试训外援首秀轻取19分
63岁男子向熊猫投掷苹果惹众怒 后果来了:被终身禁入
宝镇
天玑9200+性价王者预定!Redmi K60 Ultra第三方保护壳现身|全球新视野
支持正版:英国为采购Office刚花了71亿|天天快看
全球热资讯!7月新农合再涨40元,一市明确每人590元,今年你还交吗?
长城站起来!哈弗枭龙系列第1万台下线:6月热销6098台暴增97%
复兴号正式在青藏铁路投入运行:海拔3000米 零下40度也能跑
曼高德谈《夺宝奇兵5》
天天快讯:传奇设计大师去世:“我从不设计丑陋东西”
焦点精选!第一部8.0分不值一提!美国年度科幻大片续集来了
协鑫宣布年产36万吨储能正极材料项目今日投产-世界热讯
张雪峰老师推荐的十大高薪专业引发热议:计算机类霸榜 文科中仅法语入围 天天速读
丰田章男工资曝光:9.99亿日元丰田汽车史上最高! 环球微头条
RPM安装的Oracle19c 修改init.ora进行修复以及最简单开机启动Oracle的方法 世界百事通
markdown终极指南 观点
100%纯棉、亲肤舒适:布静观纯棉短袖13元、长袖16元
环球视讯!多地高温难耐 黑龙江却遭遇特大冰雹:砸碎几乎整栋楼玻璃
环球新消息丨安卓性能标杆!一加Ace 2 Pro来了:5200mAh+骁龙8 Gen2
米体:汉达可能降薪续约留在国米,下赛季担任二号门将 全球微动态
mosquitto的基本参数使用
全球热议:探究直播app源码技术:视频上传功能
当前资讯!02修剪标准&&方法
环球滚动:ThinkPHP6.0 链式SQL语句
【世界速看料】见证历史!苹果成全球首家市值3万亿美元公司 意味着什么?
男生旅行3年收集50余个城市水土:覆盖30个省份 比打卡拍照更有意义
云南男子外出干活遇超大菌子 网友羡慕:菌之大一锅炖不下_当前聚焦
网友吐槽一条街三四十个井盖 官方回应:雨污分流、将铺上沥青
当前热议!五年中考三年模拟八上物理答案
全球观热点:MinIO-对象存储简单使用
JS必学的11个工具方法(避免重复造轮子) 世界快看
IDA的使用2_全球新视野
荷兰DUV光刻机一律管制出口?一文看懂|环球快播
埃安6月销量45013辆创历史新高 今年已卖出比亚迪一个月销量
特斯拉加入价格乱战!买这两款车最高优惠4.5万元
国内高端手机市场除了苹果iPhone 还能有谁?! 焦点要闻
2023年全国铁路暑期运输启动:满血复活 暴涨超70%
焦点热议:使用Gitee或GitHub托管Maven仓库JAR包的便捷方法
灭霸演员是谁_ 芝士回答
世界短讯!心爱的小乌龟死了:主人把它做成《七龙珠》龟仙人手办!
担心的事情发生了!泰国女游客卷入电动步道腿被夹断
火车站保洁阿姨不慎弄脏乘客衣服跪地道歉 公司回应:已和解 世界观焦点
蔚来智能系统Banyan 2.0正式发布:超120项功能 号称全场景领先