正则表达式:使用单个字符串来描述或匹配一系列符号某句法规则的字符串。
常用的工具:grep、sed、awk。
基础元字符介绍:
元字符 | 作用 |
---|---|
* | 前一个字符匹配0次或任意多次 |
. | 匹配除了换行符外的任意一个字符 |
^ | 匹配行首。例如,^hello 会匹配以 hello 开头的行 |
$ | 匹配行尾。例如,hello& 会匹配以 hello 结尾的行 |
[] | 匹配括号中指定的任意一个字符,而且只匹配一个字符。例如.[aoeiu]匹配任意一个元音字母, [0-9] 匹配任意一位数字,[a-z][0-9] 匹配由小写字母和一位数字构成的两位字符 |
[^] | 匹配除中括号中的字符以外的任意一个字符。例如,[^0-9] 匹配任意一位非数字字符,[^a-z] 匹配任意一位非小写字母 |
\ | 转义符,用于取消特殊符号的含义 |
\{n\} | 表示其前面的字符恰好出现 n 次。例如,[0-9]\{4\} 匹配4位数字,[1][3-8][0-9]\{9\} 匹配手机号码 |
\(n,\} | 表示其前面的字符出现不少于 n 次。例如,[0-9]\{2,\} 匹配两位及以上的数字 |
\{n,m\} | 表示其前面的字符至少出现 n 次,最多出现 m 次。例如,[a-z]\{6,8\} 匹配 6〜8 位的小写字母 |
一、grep的使用
-c:打印符合要求的行数
-i:忽略大小写
-n:输出符合要求的行及其行号
-v:打印不符合要求的行
-A:-A2 打印符合要求的行以及下面两行
-B:-B2 打印符合要求的行以及上面两行
-C:-C2打印符合要求的行以及上下各两行
grep "a*" /etc/passwd #匹配零个或多个a
grep "aa*" /etc/passwd #过滤出至少包含一个a的行
grep "aaa*" /etc/passwd #过滤出至少包含2个连续a的行
grep "aaaa*" /etc/passwd #过滤出至少包含3个连续a的行
grep "^g" /etc/passwd #过滤出以小写字母g开头的行
grep "t$" /etc/passwd #匹配以小写t结尾的行
grep "^$" /tmp/test.txt #匹配空行
grep -nv "nologin" /etc/passwd #过滤出不带某关键词的行,并输出行号
grep -n "[0-9]" /tmp/test.txt #匹配包含数字的行
grep -nv "[0-9]" /tmp/test.txt #匹配不包含数字的行
二、sed的使用
sed -n ''p filename #打印某行
sed -n '//'p filename #打印包含某字符的行,类似grep
sed 'n'd filename #打印时删除某行
sed 's///g' filename #替换字符或者字符串
sed -i 's///g' filename #修改文件内容
三、awk的使用
-F:指定分隔符;不加-F ,默认空格或tab为分隔符,分隔符要使用单引号引住。
print:表示打印的动作,用来打印某段
$NF: 最后一段的值
截取文档中某段
使用逻辑符号判断。
awk的内置变量:
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行- F选项
NF 浏览记录的域个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符