[转帖]Shell编程之正则表达式与文本处理器(grep、sort、uniq、tr、cut)

shell,编程,正则表达式,文本,处理器,grep,sort,uniq,tr,cut · 浏览次数 : 0

小编点评

#!/bin/bash# a=100b=aecho \"普通echo输出的变量b的值为:\" </span>$$beval echo \"经过eval扫描输出变量b的值为:\" </span>$$b123456789 #位置锚定 ^ #行首锚定, 用于模式的最左侧$ #行尾锚定,用于模式的最右侧^root$ #用于模式匹配整行 (单独一行 只有root)^$ #空行^[[:space:]]*$ #空白行12345 < 或 \\b #词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部) > 或 \\b #词尾锚定,用于单词模式的右侧 <root> #匹配整个单词 分组或其他 分组:() 将多个字符捆绑在一起,当作一个整体处理 或者:\\ | 扩展正则表达式 表示字符相差不大 grep -E 必须用 sed -r 或者 egrep 表示次数 * 匹配前面字符任意次? 0或1次+ 1次或多次{n} 匹配n次{m,n} 至少m,至多n次{,n} #匹配前面的字符至多n次,<=n,n可以为0{n,} #匹配前面的字符至少n次,<=n,n可以为01234567 表示分组 () 分组:() 将多个字符捆绑在一起,当作一个整体处理,如:(root) | 或者 a|b #a或b C|cat #C或cat (C|c)at #Cat或cat 文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux实用命令grep命令31425 人正在系统学习中 。归纳总结以上内容,生成内容时需要带 simple 的排版

正文


正则表达式概念

REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。

正则表达式被很多程序和开发语言所广泛支持:vim, less,grep,sed,awk, nginx,mysql等

正则表达式的作用

主要用来匹配字符串(命令结果,文本内容)

通配符只用于匹配文件名、目录名等,不能用于匹配文件内容。(而且是已存在的文件或者目录)

通配符主要是为了方便用户对文件或者目录的描述,例如用户仅仅需要以".sh"结尾的文件时,使用通配符就能很方便地实现。
各个版本的shell都有通配符,这些通配符是一些特殊的字符,用户可以在命令行的参数中使用这些字符,进行文件名或者路径名的匹配。
shell将把与命令行中指定的匹配规则符合的所有文件名或者路径名作为命令的参数,然后执行这个命令。

*:通配符匹配任意一个或多个字符
ls *.txt

?:通配符
匹配一个任意字符
[root@localhost opt]# ls ?.txt

[] 通配符
[list] 匹配list中任意单个字符
ls [a-z].txt

元字符

. 匹配任意单个字符,可以是一个汉字
[] 匹配指定范围内的任意单个字符,示例:[dn] [0-9] [] [a-zA-Z] [:alpha:]
[^] 匹配指定范围外的任意单个字符,示例:[^dn] [^a.z]
[:alnum:] 字母和数字 [0-9] [a-z] [0-9] [a-z]
[:alpha:] 代表任何英文大小写字符,亦即 [A-Z], [a-z]
[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 大写字母 [A-Z]
[[:blank:]] 空白字符(空格和制表符
[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广
[:cntrl:] 不可打印的控制字符(退格、删除、警铃…)
[:digit:] 十进制数字
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
\w #匹配单词构成部分,等价于[[:alnum:]]
\W #匹配非单词构成部分,等价于[^
[:alnum:]]
\S #匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\s #匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

元字符点(.)

[root@localhost ~]#ls /etc/|grep rc[.0-6]
ls /etc/命令会列出/etc/目录下的所有文件和子目录,
| 符号用于将其输出作为grep命令的输入。
grep命令使用正则表达式rc[.0-6]来匹配文件名中包含rc加数字(0-6)的文件或目录名,
其中方括号[]表示字符集,[.0-6]表示匹配.和0-6这些字符中的任意一个。
#此处的点代表字符

grep命令在文本中查找指定的字符串

grep [选项]… 查找条件 目标文件

选项:

-m  # 匹配#次后停止
grep -m 1 root /etc/passwd   #多个匹配只取第一个

-v 显示不被pattern匹配到的行,即取反
grep -Ev '[[:space:]]*#|$' /etc/fstab

-i 忽略字符大小写 #可有可无
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # after, 后#行
-B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系,如:grep –e ‘cat ' -e ‘dog' file
-w 匹配整个单词
-E 使用ERE,相当于egrep,使用扩展正则
-F 不支持正则表达式
-f file 根据模式文件,处理两个文件相同内容 把第一个文件作为匹配条件
-r 递归目录,但不处理软链接
-R 递归目录,但处理软链接

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

表示次数
*  #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.* #任意长度的任意字符,不包括0次,也就是匹配所有
\? #匹配其前面的字符出现0次或1次,即:可有可无
\+ #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
\{n\}   #匹配前面的字符=n次
\{m,n\} #匹配前面的字符至少m次,至多n次
\{,n\}  #匹配前面的字符至多n次,<=n 
\{n,\}  #匹配前面的字符至少n次
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

举例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

sort命令排序

以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序

语法格式:
sort 选项 参数
cat file | sort 选项

常用选项:
-f:忽略大小写,默认会大写字母排在前面
-b:忽略每行前面的空格
-n:按照数字进行排序
-r:反向排序
-u:等同uniq,表示相同的数据仅显示一行,去重
-t:指定字段分隔符,默认使用tab键分隔
-k:指定排序字段
-o <输出文件>:将排序后的结果转存至指定文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

uniq命令快捷去重

uniq命令用于报告或者忽略文件中连续的重复行,常与sort命令结合使用。

格式:
uniq [选项] 参数 ​
cat 文件| uniq 选项
-c 统计连续重复的行的次数,并且合并重复的行
-u 显示仅出现一次的行(包括不连续的重复行)
-d 仅显示重复出现的行(必须是连续的重复行)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

tr命令替换、压缩和删除

常用于对来自标准输入的字符进行替换、压缩和删除

语法格式:
tr 选项 参数

常用选项:
-c:保留字符集1的字符,其他的字符(包括换行符\n)用字符集2替换
-d:删除所有属于字符集1的字符
-s:将重复出现的字符串压缩为一个字符串,用字符集2 替换 字符集1
-t:字符集2 替换 字符集1,不加也行

参数:

字符集1:
指定要转换或删除的原字符集。当执行转换操作时,
必须使用参数”字符集2“指定转换操作时,必须使用参数”字符集2“指定转换的目标字符集。
但执行删除操作时,不需要参数”字符集2“

字符集2:
指定要转换成的目标字符集

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

cut命令快速裁剪命令

expr substr 截取方法

在这里插入图片描述

cut截取方法

对字段进行截取和剪裁
格式:
格式一:cut [选项] 参数
格式二:cat file | cut [选项]

-d 指定分隔符(默认分隔符为Tab)
-f 按字段进行截取。指定第n个字段;
-b 以字节为单位进行截取
-c 以字符为单位进行截取
–complement 排除所指定的字段
–output-delimiter 更改输出内容的分隔符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

split命令文件拆分

split命令用于在Linux下将大文件拆分为若干小文件。

格式:split 选项 参数 原始文件 拆分后文件名前缀
-l 指定行数
-b 指定文件的大小

在这里插入图片描述
在这里插入图片描述

paste命令文件合并

按照字段来进行文件的合并
格式:

paste [选项] 文件1 文件2
-d 用于指定文件的分隔符(默认情况下为制表符"\n")
-s 将列和行的内容进行互相交换

重点:paste a b和cat a b 之间的区别 ?
cat 是上下合并,paste 是左右拼接

面试题 统计当前主机的连接状态
在这里插入图片描述
统计当前连接主机数

在这里插入图片描述

eval变量扫描器

命令字前加上eval,shell会在执行命令之前扫描它两次,eval命令首先会先扫描命令行进行所有的置换,然后再执行命令,该命令适用于那些一次扫描无法实现功能的变量,该命令会对变量进行两次扫描。

脚本运用测试:

#!/bin/bash

#这是一个验证eval扫描的脚本
a=100
b=a

echo "普通echo输出的变量b的值为:" </span>$$b
eval echo "经过eval扫描输出变量b的值为:" </span>$$b

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

位置锚定

^ #行首锚定, 用于模式的最左侧
$ #行尾锚定,用于模式的最右侧
^root$    #用于模式匹配整行 (单独一行  只有root)
^$ #空行
^[[:space:]]*$ #空白行
  • 1
  • 2
  • 3
  • 4
  • 5

< 或 \b #词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)
> 或 \b #词尾锚定,用于单词模式的右侧
<root> #匹配整个单词
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分组或其他

分组:() 将多个字符捆绑在一起,当作一个整体处理
或者:\ |

在这里插入图片描述

扩展正则表达式

表示字符相差不大

grep -E 必须用 sed -r
或者
egrep

表示次数

*   匹配前面字符任意次
?   01+   1次或多次
{n} 匹配n次
{m,n} 至少m,至多n次
{,n}  #匹配前面的字符至多n次,<=n,n可以为0
{n,}  #匹配前面的字符至少n次,<=n,n可以为0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

表示分组

() 分组
分组:() 将多个字符捆绑在一起,当作一个整体处理,如:(root)
| 或者
a|b #a或b
C|cat #C或cat
(C|c)at #Cat或cat

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux实用命令grep命令31425 人正在系统学习中

与[转帖]Shell编程之正则表达式与文本处理器(grep、sort、uniq、tr、cut)相似的内容:

[转帖]Shell编程之正则表达式与文本处理器(grep、sort、uniq、tr、cut)

目录 正则表达式概念正则表达式的作用元字符grep命令在文本中查找指定的字符串sort命令排序uniq命令快捷去重tr命令替换、压缩和删除cut命令快速裁剪命令expr substr 截取方法cut截取方法 split命令文件拆分paste命令文件合并eval变量扫描器位置锚定分组或其他扩展正则表达

[转帖]Shell编程之免交互

目录 交互的概念与Linux中的运用Here Document 免交互tee命令重定向输出加标准输出支持变量替换多行注释Expect实例操作免交互预设值修改用户密码创建用户并设置密码实现 ssh 自动登录 交互的概念与Linux中的运用 交互:当计算机播放某多媒体程序的时候,编程人员可以发出指令控制

[转帖]Shell编程之函数

目录 Shell函数使用Shell函数的优点 Shell 函数定义使用原则函数传参函数变量的作用范围 函数递归阶乘递归目录函数库 Shell函数 将命令序列按格式写在一起可方便重复使用命令序列Shell函数定义 调用函数的方法 使用Shell函数的优点 使用函数可以避免代码重复使用函数可以将大的工程

[转帖]shell编程之循环语句

目录 一、循环语句for循环for语句的结构嵌套循环 while语句的结构while语句应用示例 until语句的结构until语句示例 二、跳出循环continue跳出循环break跳出循环 三、常用循环脚本实例循环打印9*9乘法表数字累加脚本(1-100)常用转义字符购物shell 计算器正等腰

[转帖]Bash脚本编程学习笔记10:参数展开

https://www.cnblogs.com/alongdidi/p/bash_parameter_expansion.html 简介 原标题叫做《Bash脚本编程之字符串处理》。 其实这里说得字符串处理,对应的是bash官网中的【Shell Parameter Expansion】,不过直接去看

[转帖]生产环境shell脚本安全之shc编译(转C)

https://www.jianshu.com/p/17399dcd1471 应用场景很多,如,中小项目大多使用mysql,那么在你的mysqladmin备份脚本里可能存在明文的密码,此时由于公司服务器可能多个同事使用,那么转码加密脚本至关重要! 1,首先 SHC安装(建议使用交新版本,如 4.0.

[转帖]shell编程-字符截取命令

grep 命令 命令格式: grep [选项] 查找的字符串 文件名 作用: 在文件中搜索查找字符串,显示匹配字符串所在的行。 选项: -i:查找时忽略大小写。-n:显示行号。-v:反向查找(把不含有要搜索字符串的所有行显示出来)。-c:计算匹配到 ‘搜寻字符串’ 的次数。-r:在指定的目录中查找,

[转帖]Linux Shell编程 循环语法

https://zhuanlan.zhihu.com/ for循环 for 循环是固定循环,也就是在循环时已经知道需要进行几次循环。有时也把 for 循环称为计数循环。语法: for 变量 in 值1 值2 值3… do 程序 done 在这种语法中,for 循环的次数取决于 in 后面值的个数(以

[转帖]linux shell中 if else以及大于、小于、等于逻辑表达式介绍

https://www.jb51.net/article/34332.htm 在linux shell编程中,大多数情况下,可以使用测试命令来对条件进行测试,这里简单的介绍下,方便需要的朋友 比如比较字符串、判断文件是否存在及是否可读等,通常用"[]"来表示条件测试。注意:这里的空格很重要。要确保方

[转帖]整理收藏:shell中的test条件测试

https://zhuanlan.zhihu.com/p/504991399 shell编程中经常会有很多需要逻辑判断的地方,比如一个文件/文件夹是否存在,字符串是否为空等等,而test就具有这样的优良传统,将我们需要的结果通过简单的表达式查询,从而通过状态码$?取值。 1.对文件类型的检测 -e: