正则表达式:
正则表达式区别于通配符,正则表达式是用来匹配文本的内容,命令的输出结果也属于文本内容。也可以使用正则表达式。
通配符用来匹配文件名和目录名。
grep用来过滤文本内容,以匹配要查询的结果。
linux的文本三剑客
grep--------------->查找文本内容
sed
awk
-m数字 匹配几次后停止:
grep -m 1 root /etc/passwd #查找包含root行
-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排序后的结果,输出到指定的文件
uniq 去重,用于统计或者忽略文件中连续出现的重复行,一般和sort结合使用
uniq 选项 文件名
cat 文件名 | uniq 选项
-c 统计连续重复的行的次数,并且合并重复的行
-u 显示仅出现一次的行 (包括不连续重复的行)
-d 仅显示重复出现的行 (必须连续重复的行)
tr 用来对标准输入的字符串进行替换,压缩和删除
tr 选项 参数
echo "字符串" | tr 选项
-c 保留字符集1的字符,用其他字符来替换字符集2
-d 删除属于字符集1的字符
-s 将重复出现的字符压缩成一个,用字符集2替换字符集1
\n 相当于 回车
-t 默认带t ,替换字符集,一般不加
cut 截取,对字段进行截取和裁剪
cut 选项 参数
cat 文件名 | cut 选项
-d 指定分隔符(默认分隔符是tab)
-f 指定截取的字段
-b 以字符的单位进行截取
-c 以字符的单位进行截取
--complement: 排除指定的字段
-output-delimeiter :更改输出内容的分隔符
以 :为分隔符,截取 /etc/passwd 的1-3列
文件合并的方法是什么,区别是什么?
cat 1 2 > 3 上下合并
paste 1 2 >3 左右合并
文件拆分: 有一个日志文件,8G,直接打开速度很慢,有什么办法提高速度?
拆分
split
-l 按行分割
-b 按文件大小分割
统计当前主机的连接状态
统计nginx的访问日志当中多次出现的ip地址:
正则表达式:
按照一定格式和符合来匹配文件内容(命令输出的结果)
通配符:用来匹配文件名或者目录名
* :表示任意一个或多个字符
?: 任意的单个字符
[a-z]
[A-Z] 匹配任意单个字符
[0-9]
正则表达式的格式:
基本正则表达式 grep
扩展正则表达式 grep -E =egrep
元字符:
. :任意单个字符
\. :表示转义符
[0-9]:匹配文件内容的任意单个数字
[a-z]:匹配文件内容的任意单个小写字母
[A-Z]:匹配文件内容的任意单个大写字母
使用正则表达式,匹配内容最好是用引号引起来
[[:blank:]] 空白字符,空格
() :分组
[^] :取反
*:任意字符,表示匹配前面的任意字符,0次,尽可能多的匹配
.*:匹配任意长度的字符,最少要有一次,也就是匹配所有
\?:匹配前面的字符0次或者1次,可有可无
\+:匹配前面的字符,最少出现1次,有且>=1
\{n\}:匹配前面的字符等于多少次
\{m,n\}:匹配前面的字符最少m次最多n次
\{,n\}:匹配前面的字符最多是n次,只要比n小,都算
\{n,\}:匹配前面的字符最少n次,只要比n大,都算
位置锚定
以什么为开头^
以什么为结尾 $
空白行: ^$
^root$:匹配整个单词,且这一行只有这个单词
词首锚定
\b
词尾锚定
\b
分组和逻辑条件
分组: ()
或: \|
扩展正则:
grep -E
sed -r
egrep
表示次数:
*:任意字符,表示匹配前面的任意字符,0次,尽可能多的匹配
.*:匹配任意长度的字符,最少要有一次,也就是匹配所有
?:匹配前面的字符0次或者1次,可有可无
+:匹配前面的字符,最少出现1次,有且>=1
{n}:匹配前面的字符等于多少次
{m,n}:匹配前面的字符最少m次最多n次
{,n}:匹配前面的字符最多是n次,只要比n小,都算
{n,}:匹配前面的字符最少n次,只要比n大,都算
案例
1、显示/etc/passwd中以sh结尾的行;
2、查找/etc/inittab中含有“以s开头,并以d结尾的单词”模式的行;
3、查找ifconfig命令结果中的1-255之间的整数;
4、在/etc/passwd中取出默认shell为bash的行;
5、高亮显示passwd文件中冒号,及其两侧的字符