正则表达式
发布时间:2020-12-13 22:32:04 所属栏目:百科 来源:网络整理
导读:1.grep (查找字符串) 格式:grep [-acinv] '搜索字符串' filename -a:在二进制文件中,以文本文件的方式搜索数据 -c:计算找到‘搜索字符串’的次数 -i:忽略大小写的不同 -n:输出行号 -v:反向搜索,即显示出没有‘搜索字符串’内容的那一行 1.1搜索特点
1.grep (查找字符串)
格式:grep [-acinv] '搜索字符串' filename -a:在二进制文件中,以文本文件的方式搜索数据 -c:计算找到‘搜索字符串’的次数 -i:忽略大小写的不同 -n:输出行号 -v:反向搜索,即显示出没有‘搜索字符串’内容的那一行
1.1搜索特点字符
eg: grep 'root' /var/log/secure
1.2利用[]来搜索集合字符
eg: grep 't[ae]st' filename 搜索test或tast这两个单词的行
eg: grep '[^g]oo' filename 搜索oo前面不是g的单词的行
eg: grep '[^a-z]oo' filename 搜索oo前面不是英文小写的单词的行
1.3行首与行尾字符 ^ $
eg: grep '^[a-z]' filename 搜索行首为小写英文的单词的行 eg: grep '^[^a-z]' filename 搜索行首不是小写英文的单词 eg: grep 'a$' filename 搜索行尾为a的行
eg: grep '^$' filename 搜索文件中的空白行
1.4任意一个字符(.)与重复字符(*)
eg: grep 'g..d' filename 搜索以g开头,d结尾4个单词的行 eg: grep 'ooo*' filename 搜索至少两个o以上的字符串的行
1.5限定连续重复字符范围{}
eg: grep 'o{2}' filename 搜索包含2个o的行 注意:{}需要用到转义符()
2.sed工具
格式: sed [-nefr] [动作] -n :使用安静模式 -e :直接在命令行模式上进行sed的操作 -f :直接将sed的操作写在一个文件内,-f filename则可以执行filename内的sed操作。 -r :sed的操作支持的是扩展正则表达式的语法
操作说明: [n1[,n2]]function
n1,n2 :不一定存在,一般代表“选择进行操作的行数”。 function操作有: a :新增,a的后面可以接字符串,而这些字符串会在新的一行出现(当前的下一行) c :替换 ,c的后面可以接字符串, d : 删除,后面通常不接字符串 i :插入,i的后面可以接字符串,而这些字符串会在新的一行出现(当前的上一行) p :打印,通常与参数-n一起运行 s : 搜索,还可以替换,例如: 1,20s/old/new/g
2.1
eg: nl /etc/passwd | sed '2,5d' 显示/etc/passwd的内容,并且需要打印行号,同时请将第2-5行删除
eg: nl /etc/passwd | sed '3,$d'
显示/etc/passwd的内容,并且需要打印行号,同时请将第3到最后一行删除
eg: nl /etc/passwd | sed '2a drink tea'
在第二行后加上“drink tea”字样
eg:nl /etc/passwd | sed '2,5c No 2-5 number'
将2-5行的内容替换成“No 2-5 number”。
eg: nl /etc/passwd | sed -n '5,7p'
仅显示5-7行 eg:ifconfig eth0 | grep 'inet ' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g' 只显示ip地址,不显示其他东西
3.awk工具
与sed常常用作于整行处理相比,awk比较倾向于一行中分成数个“字段”来处理。
格式: awk '条件类型1{动作1} 条件类型2{动作2} ...' filename
awk的内置变量:
NF:每一行拥有的字段总数 NR:当前awk所处理的是“第几行”数据 FS:当前的分隔符,默认空格键
3.1
eg: last | awk '{print $1 "t" $3}' 取出每一行的第一栏和第三栏。(其中$0表示整行)
3.2
eg: last | awk '{print $1 "t lines: " NR "t columes: " NF}' 列出每行的第一栏,并显示行号和字段总数(即栏数)
3.3
eg: cat /etc/passwd | awk '{FS=":"} $3<10{print $1 "t" $3}' 分隔符用“:”,列出第一栏和第三栏并且第三栏的数据要大于10. eg:cat /etc/passwd | awk 'BEGIN {FS=":"}{print $1}' 查看存在的用户 cat /etc/passwd | sed 's/:.*$//g' 3.4 eg:有一个文件pay.txt。内容如下: Name 1st 2nd 3th xb 2300 3400 3450 bobo 5400 4300 2300 ...... 想计算出每个人的总额,并格式化输出。输出结果如下: Name 1st 2nd 3th total xb 2300 3400 3450 9150 bobo 5400 4300 2300 12000 ...... 命令为: cat pay.txt | awk 'NR==1{printf “%10s %10s %10s %10s %10sn",$1,$2,$3,$4,"total"} NR>=2{total=$2+$3+$4 printf "%10s %10d %10d %10d %10dn",total}'
4.文件比较
4.1 diff (行为单位比较) 格式:diff [-bBi] from-file to-file 参数: -b :忽略一行中有多个空白的差异(例如:“about me"与”about me")视为相同 -B : 忽略空白行的不同 -i :忽略大小写的不同 eg:diff /tmp/test/passwd /etc/passwd 文件的比较
eg: diff /etc /tmp/test 目录的比较
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |