正则表达式
由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同
通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。
元字符
. #匹配任意单个字符,可以是一个汉字
[] #匹配指定范围内的任意单个字符,
[^] #匹配指定范围外的任意单个字符,示例:[^zhou]
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围
广
表示次数的字符
* #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
[root@localhost ~] echo goooooogle |grep 'go*gle'
.* #任意长度的任意字符,不包括0次
[root@localhost ~] echo gdadadadgle |grep "g.*gle"
\? #匹配其前面的字符出现0次或1次,即:可有可无
[root@localhost ~] echo ggle |grep "go\?gle"
\+ #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
[root@[root@localhost ~] echo google |grep "go\+gle"
\{n\} #匹配前面的字符n次
[root@localhost ~] echo google |grep 'go\{2\}gle'
\{m,n\} #匹配前面的字符至少m次,至多n次
[root@localhost ~] echo gooooogle |grep 'go\{2,5\}gle'
\{,n\} #匹配前面的字符至多n次,<=n
\{n,\} #匹配前面的字符至少n次
[root@localhost ~] echo gooooogle |grep 'go\{2,\}gle'
位置锚定
^ #行首锚定, 用于模式的最左侧
$ #行尾锚定,用于模式的最右侧
^PATTERN$ #用于模式匹配整行 (单独一行 只有root)
^$ #空行
^[[:space:]]*$ # 空白行
\< 或 \b #词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)
\> 或 \b #词尾锚定,用于单词模式的右侧
\<PATTERN\> #匹配整个单词
grep命令
grep [选项]… 查找条件 目标文件
-i:查找时忽略大小写
-v:反向查找,输出与查找条件不相符的行
-o 只显示匹配项
-f 对比两个文件的相同行
-c 统计匹配的行数
-n 显示匹配的行号
-w 匹配整个单词
-r 递归目录,但不处理软链接
[root@localhost ~] grep -i 'root' /etc/passwd #忽略大小写过过滤文件内容
输出:root和ROOT包括的行
[root@localhost ~] grep -v '^#' /etc/passwd #过滤出文件中不以#开头的行
输出:不以 # 开头的行
[root@localhost ~] grep -o root /etc/passwd #过滤出root
输出:root
[root@localhost ~] grep -w 'root' /etc/passwd # 过滤出包含这个的单词
输出:含有root的单词 如rootwaste
[root@localhost ~] grep -v 'root' /etc/ #快速过滤出含root的内容
-A # after, 后#行
-B # before, 前#行
-C # context, 前后各#行
grep -A3 root /etc/passwd #匹配到的行后3行显示出来
grep -B3 root /etc/passwd #匹配到的行前3行显示出来
grep -C3 root /etc/passwd #匹配到的行前后各3行显示出来
tr命令
tr [选项]
-d 删除
-s 压缩
-c 用字符串1中字符集的补集替换此字符集
[root@localhost ~] tr 123 abc #只要出现123 就转换成abc
1g2j3k
agbjck
[root@localhost ~] tr 12345678 abc #最后一个会一直用
123456789
abcccccc9
[root@localhost ~] tr -d abc #删除abc
2a34bc
234
[root@localhost ~] tr -s " " #将多个空行压缩为一个
1 2 3 4
1 2 3 4
[root@localhost ~] tr -s "a" #将多个相同字符压缩为一个
aaaa
a
cut命令
cut命令可以提取文本数据中指定的列。
cut命令可以根据指定的字符位置或指定的字段分隔符来截取文本,并将结果输出到标准输出或指定的文件。
cut [选项] 文件
-d 指定字段的分隔符,默认为制表符。
-f 指定要提取的字段列表,字段列表之间使用逗号分隔
-c 指定要提取的字符位置列表,字符位置列表之间使用逗号分隔
--complement 提取指定字段或字符位置之外的内容
[root@localhost ~] cut -f1 aa.txt #提取文件第一列
[root@localhost ~] cut -f2,4,5 -d',' aaa.txt #提取文件第2 4 5列,用逗号作分隔符
[root@localhost ~] cut -c1-9 aaa.txt #提取文件前9个字符
[root@localhost ~] cut -f3 --complement file.txt # 提取文件的前2列以外的所有列
sort命令
sort命令用于对文本文件进行排序,默认以字母排序。
sort [选项] file
-b 忽略行首空白字符
-r 以倒序方式进行排序
-f 忽略大小写进行排序
-n 按照数值大小进行排序
-u 去除重复行
-t 指定字段分隔符
-k 指定按照字段排序
uniq命令
uniq 命令用于找出或删除文本文件中连续出现的重复行。
uniq [选项] [输入文件 [输出文件]]
-c 在输出结果中显示每行重复出现的次数。
-d 只显示重复行。
-u 只显示不重复的行。