1、正则表达式

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\]:匹配任意单个字符 ![](https://i-blog.csdnimg.cn/direct/6b7876dcc6314a6596b176be6a7e22ae.png) ### 基本正则 #### 元字符 * **.** :任意单个字符 * \\:表示转义符 ![](https://i-blog.csdnimg.cn/direct/1a46ea763e6a49249f78143cf735ffe4.png) * \[a-b\]、\[A-Z\]、\[0-9\]:匹配文件内容的任意单个字符 * \[\[:blank:\]\]:匹配空白字符,空格 ![](https://i-blog.csdnimg.cn/direct/8c037260d8684294b94f0a920b81ff3c.png) * ():表示分组 * \[\^\]:取反 ![](https://i-blog.csdnimg.cn/direct/f672eb853a16481b96ebbf503a15d2c0.png) ![](https://i-blog.csdnimg.cn/direct/f9adfbb8415f4f6a86711bdcaf969bdb.png) ![](https://i-blog.csdnimg.cn/direct/d3ca0780b45649e7923ef2c858b28eda.png) #### 次数表示 * \*:任意字符,表示匹配前面的任意字符,0次也算,尽可能多的匹配 ![](https://i-blog.csdnimg.cn/direct/f2a8cbd1d56f4a829c96df756e6e8de8.png) * **.** \*:任意长度的字符,最少有1次,也就是匹配所有。 ![](https://i-blog.csdnimg.cn/direct/a0af2a9cde56409c9a7586341d9354bc.png) * \\?:匹配前面的字符0次或者1次,可有可无 ![](https://i-blog.csdnimg.cn/direct/f5b10f0bd649443c92b10e22f71b8ba4.png) * \\+:匹配前面的字符,最少出现1次,有且\>=1 ![](https://i-blog.csdnimg.cn/direct/3f3e6c2dceba474a9cd306177337c4ea.png) * \\{n\\}:匹配前面的字符等于多少次 ![](https://i-blog.csdnimg.cn/direct/5cda56fd144c415e843ba5eca1ba4d05.png) * \\{m,n\\}:匹配前面的字符最少m次,最多n次 ![](https://i-blog.csdnimg.cn/direct/b73a826e5ea24604bff837c340d38f3f.png) * \\{,n\\}:匹配前面的字符最多n次,只要比n小,都算 ![](https://i-blog.csdnimg.cn/direct/c87804daebd94912a999ebf70c115ae8.png) * \\{m,\\}:匹配前面的字符最少m次,只要比m大,都算 案例1:匹配ens33出现的IP地址 ![](https://i-blog.csdnimg.cn/direct/ac47a074643449bf87aa1fde6cec900e.png) 命令:ifconfig ens33 \| grep -w "inet" \| grep -Eo "\[0-9\]+\\.\[0-9\]+\\.\[0-9\]+\\.\[0-9\]+" ![](https://i-blog.csdnimg.cn/direct/6b71ba193fa6448487e37a612b4cdb21.png) #### 位置锚定 * \^:以什么开始 * $:以什么结尾 * \^$:空行 \^root$:表示匹配以root为开头和结尾的,即这一行只有root一个单词 ![](https://i-blog.csdnimg.cn/direct/846fe7b75b9c4070adadb1fa4cf31f3f.png) 词首锚定 * \\b 词尾锚定 * \\b ![](https://i-blog.csdnimg.cn/direct/d01a36a165ec4f389e56f4f68b256c6d.png) #### 分组和逻辑条件 分组:() ![](https://i-blog.csdnimg.cn/direct/5a320327e88a4f2e9f01de60f2a8dfcb.png) 或:\\\| ![](https://i-blog.csdnimg.cn/direct/95133b9a839f454e87f49db6743d3d70.png) ### 扩展正则 扩展正则表达式 grep -E = egrep \*:任意字符,表示匹配前面的任意字符,0次也算,尽可能多的匹配 . \*:任意长度的字符,最少有1次,也就是匹配所有 ?:匹配前面的字符0次或者1次,可有可无 +:匹配前面的字符,最少出现1次,有且\>=1 {n}:匹配前面的字符等于多少次 {m,n}:匹配前面的字符最少m次,最多n次 {,n}:匹配前面的字符最多n次,只要比n小,都算 {m,}:匹配前面的字符最少m次,只要比m大,都算 ![](https://i-blog.csdnimg.cn/direct/1b8d76d27d5e472d89a72397304d08b3.png) ## 补充案例 案例1:显示/etc/passwd中以sh结尾的行 ![](https://i-blog.csdnimg.cn/direct/7e648b3b8c0d4a439bf5612f9518e247.png) 案例2:查找/etc/inittab中含有"以s开头,并以d结尾的单词模式的行 ![](https://i-blog.csdnimg.cn/direct/6da2fca2683b47baa8cd1c91f51b8703.png) 案例3:查找ifconfig命令结果中的1-255之间的整数 ![](https://i-blog.csdnimg.cn/direct/798203db10e8472ab926b9b649198486.png) 案例4:在/etc/passwd中取出默认shell为bash的行 ![](https://i-blog.csdnimg.cn/direct/0662c8a7c73a40cb9a2c5ec6c8eb18f4.png) 案例5:高亮显示passwd文件中冒号,及其两侧的字符 ![](https://i-blog.csdnimg.cn/direct/506373c411454521a1fbb8c6d8f96aff.png) 案例6:统计当前主机状态,使用netstat或者ss 方法1:netstat -antp \| grep -v "State" \| grep -v "Internet" \| tr -s " " \| cut -d " " -f 6 \| sort \| uniq -c ![](https://i-blog.csdnimg.cn/direct/49d12c46e5794e378caae857b76fa189.png) 方法2:ss -antp \| grep -v "State" \| cut -d " " -f 1 \| sort \| uniq -c ![](https://i-blog.csdnimg.cn/direct/0cf0618cc3e64795bc013677227a6f65.png) 案例7:统计nginx的访问日志当中多次出现的ip地址 cat /var/log/nginx/access.log \| cut -d " " -f 1 \| sort \| uniq -c ![](https://i-blog.csdnimg.cn/direct/7003262ac86340d8a46b68524e5b2ff7.png)

相关推荐
cg50175 小时前
Spring Boot 的配置文件
java·linux·spring boot
暮云星影6 小时前
三、FFmpeg学习笔记
linux·ffmpeg
rainFFrain6 小时前
单例模式与线程安全
linux·运维·服务器·vscode·单例模式
GalaxyPokemon6 小时前
Muduo网络库实现 [九] - EventLoopThread模块
linux·服务器·c++
mingqian_chu6 小时前
ubuntu中使用安卓模拟器
android·linux·ubuntu
GalaxyPokemon8 小时前
Muduo网络库实现 [十] - EventLoopThreadPool模块
linux·服务器·网络·c++
自由鬼8 小时前
开源虚拟化管理平台Proxmox VE部署超融合
linux·运维·服务器·开源·虚拟化·pve
瞌睡不来8 小时前
(学习总结32)Linux 基础 IO
linux·学习·io
inquisiter8 小时前
UEFI镜像结构布局
linux·spring