grep匹配
grep用来过滤文本内容,以匹配要查询的结果。
grep root /etc/passwd:匹配包含root的行
- -m 数字:匹配几次后停止
- -v:取反
- -i:忽略字符的大小写,默认的,可以不加
- -n:显示匹配的行号
- -c:统计匹配的行数
- -o:仅匹配的字符串
- -q:静默模式
- -A 数字:after,包含匹配到的行,以及后几行
- -B 数字:包含匹配到的行,以及前几行
- -C 数字:包含匹配到的行,以及前后各几行
- -w:匹配完整的单词的行
- -E:使用扩展正则表达式,egrep=grep -E
- -f:匹配两个文件中的相同内容,以第一个文件的内容为准(参照)
- -r:递归目录,查找文件内容,软连接内容不包含。
- -R:递归目录,查找文件内容,软连接内容包含。
sort排序
按行对文件的内容进行排序,也可以根据不同的数据类型进行排序
可见数字在前,字母在后。
- -f:忽略大小写,可以不加
- -b:忽略每行前面的空格
- -n:按照数字进行排序
- -u:去重,相同的内容仅显示一行
- -o:输出的文件名,把sort排序后的结果输出到指定的文件
案例1:按原文排序输出到指定文件里
cat -n 可以添加行数,sort -no 表示按数字排序输出到指定文件中,正好可以按原文输出。
uniq去重
用于统计或者忽略文件中连续出现的重复行,一般和sort结合使用
uniq 选线 文件名 = cat 文件名 | uniq 选项
- -c:统计连续重复的行的次数,并且合并重复的行
- -u:显示仅出现一次的行(包括不连续的重复的行)
- -d:仅显示重复出现的行(必须时连续的重复的行)
tr替换、压缩和删除
用来对标准输入的字符串进行替换、压缩和删除
tr 选项 参数
echo "字符串" | tr 选项
- -c:保留字符集1的字符,其他字符替换字符集2
- -d:删除属于字符集1的字符
- -s:将重复出现的字符串压缩成一个,用字符集2 替换 字符集1。
- -t:默认带t,替换字符集,一般不加
cut 截取
cut是对字段进行截取和裁剪
cut 选项 参数
cat 文件名 | cut 选项
- -d:指定分隔符(默认分隔符是tab)
- -f:指定要截取的字段
- -b:以字符的单位进行截取
- -c:以字符的单位进行截取
- -complement:排除指定的字段
- -output-delimiter:更改输出内容的分隔符
以:为分隔符,截取 /etc/passwd 的第1-3段字符。
文件合并
cat 1 2 > 3 ---上下合并
paste 1 2 > 3 ---左右合并
split文件拆分
有一个文件,太大,直接打开速度很慢,有什么办法提高素的?
- -l:按行分割
- -b:按大小分割
正则表达式
正则表达式区别通配符,正则表达式匹配文本的内容,命令的输出结果也属于文本内容,也可以使用正则表达式。
使用正则表达式,匹配内容最好用引号(单双都行)引起来,避免发生歧义。
通配符用来匹配文件名和目录名。
通配符
匹配文件名或者目录名
*:任意一个或多个字符
?:任意单个字符
[a-z]、[0-9]:匹配任意单个字符
基本正则
元字符
- . :任意单个字符
- \:表示转义符
- [a-b]、[A-Z]、[0-9]:匹配文件内容的任意单个字符
- [[:blank:]]:匹配空白字符,空格
- ():表示分组
- [^]:取反
次数表示
- *:任意字符,表示匹配前面的任意字符,0次也算,尽可能多的匹配
- . *:任意长度的字符,最少有1次,也就是匹配所有。
- \?:匹配前面的字符0次或者1次,可有可无
- \+:匹配前面的字符,最少出现1次,有且>=1
- \{n\}:匹配前面的字符等于多少次
- \{m,n\}:匹配前面的字符最少m次,最多n次
- \{,n\}:匹配前面的字符最多n次,只要比n小,都算
- \{m,\}:匹配前面的字符最少m次,只要比m大,都算
案例1:匹配ens33出现的IP地址
命令:ifconfig ens33 | grep -w "inet" | grep -Eo "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"
位置锚定
- ^:以什么开始
- $:以什么结尾
- ^$:空行
^root$:表示匹配以root为开头和结尾的,即这一行只有root一个单词
词首锚定
- \b
词尾锚定
- \b
分组和逻辑条件
分组:()
或:\|
扩展正则
扩展正则表达式
grep -E = egrep
*:任意字符,表示匹配前面的任意字符,0次也算,尽可能多的匹配
. *:任意长度的字符,最少有1次,也就是匹配所有
?:匹配前面的字符0次或者1次,可有可无
+:匹配前面的字符,最少出现1次,有且>=1
{n}:匹配前面的字符等于多少次
{m,n}:匹配前面的字符最少m次,最多n次
{,n}:匹配前面的字符最多n次,只要比n小,都算
{m,}:匹配前面的字符最少m次,只要比m大,都算
补充案例
案例1:显示/etc/passwd中以sh结尾的行
案例2:查找/etc/inittab中含有"以s开头,并以d结尾的单词模式的行
案例3:查找ifconfig命令结果中的1-255之间的整数
案例4:在/etc/passwd中取出默认shell为bash的行
案例5:高亮显示passwd文件中冒号,及其两侧的字符
案例6:统计当前主机状态,使用netstat或者ss
方法1:netstat -antp | grep -v "State" | grep -v "Internet" | tr -s " " | cut -d " " -f 6 | sort | uniq -c
方法2:ss -antp | grep -v "State" | cut -d " " -f 1 | sort | uniq -c
案例7:统计nginx的访问日志当中多次出现的ip地址
cat /var/log/nginx/access.log | cut -d " " -f 1 | sort | uniq -c