shell编程之正则表达式与文本处理器

正则表达式

▪ Linux系统中常见的文本处理器(grep、egrep、sed、awk)

1.基础正则表达式示例

示例:操作一个名为test.txt的测试文件

(1)查找特定字符 the

▪ grep -n 'the' test.txt:其中“-n”表示显示行号

▪ grep -in 'the' test.txt:“-i”表示不区分大小写

▪ 若反向选择,查找不包含“the”字符的行,则通过grep命令的“-v”选项实现,并配合“-n”一起使用显示行号:

grep -vn 'the' test.txt

(2)利用中括号“[]”来查找集合字符

▪ 想要查找“shirt”与“short”这两个字符串时:grep -n 'sh[io]rt' test.txt

▪ 查找包含重复单个字符“oo”时:grep -n 'oo' test.txt

▪ 查找“oo”前面不是“w”的字符串:grep -n '[^w]oo' test.txt

▪ 不希望“oo”前面存在小写字母:grep -n '[^a-z]oo' test.txt

▪ 不希望“oo”前面存在大写字母:grep -n '[^A-Z]oo' test.txt

▪ 查找包含数字的行可以通过:grep -n '[0-9]' test.txt

(3)查找行首“^”与行尾字符“$”

▪ 想要查询以“the”字符串为行首的行:

grep -n '^the' test.txt

▪ 查询以小写字母开头的行:grep -n '^[a-z]' test.txt

▪ 查询以大写字母开头的行:grep -n '^[A-Z]' test.txt

▪ 查询不以字母 开头的行:grep -n '^[^a-zA-Z]' test.txt

"^"符号在“[]”内表示反向选择,在符号外表示定位行首

▪ 查找以某一特定字符结尾的行则可以使用“$”定位符,例如,查找以小数点结尾的行:grep -n '\.$' test.txt

▪ 查询空白行:grep -n '^$' test.txt

(4)查找任意一个字符“.”与重复字符“*”

▪ 查找以w开头以d结尾的字符串:grep -n 'w..d' test.txt

▪ 查询以w开头d结尾,中间包含至少一个o的字符串:grep -n 'woo*d' test.txt

▪ 查询以w开头d结尾,中间的字符可有可无的字符串:grep -n 'w.*d' test.txt

▪ 查询任意数字所在行:grep -n '[0-9][0-9]*' test.txt

(5)查找连续字符范围“{}”

①查询两个o的字符

grep -n 'o\{2\}' test.txt

②查询以w开头d结尾,中间包含2~5个o的字符串

grep -n 'wo\{2,5\}d' test.txt

③查询以w开头d结尾,中间包含2个或2个以上o的字符串

grep -n 'wo\{2,\}d' test.txt

2.元字符总结

^ :匹配输入字符串的开始位置

$:匹配输入字符串的结尾位置

.:匹配除“\r\n”之外的任何单个字符

\:反斜杠,又叫转义字符,去除其后紧跟的元字符或通配符的特殊意义

*:匹配前面的子表达式零次或多次

[]:字符集合。匹配所包含的任意一个字符

[^]:赋值字符集合。匹配未包含的一个任意字符

[n1-n2]:字符范围。匹配指定范围内的任意一个字符

{n}:n是一个非负整数,匹配确定的n次

{n,}:n是一个非负整数,至少匹配n次

{n,m}:m和n均为非负整数,其中n

扩展正则表达式

文本处理器

sed工具

sed的工作流程主要包括读取、执行和显示三个过程

▪ 读取:sed从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中

▪ 执行:默认情况下,所有的sed命令都在模式空间中顺序的执行,除非制定了行的地址,否则sed命令将会在所有的行上依次执行

▪ 显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完

1.sed命令常见用法

常见的sed命令选项主要包含:

▪ -e或--expression=:表示用指定命令或脚本来处理输入的文本文件

▪ -f或--file=:表示用指定的脚本文件来处理输入的文本文件

▪ -h或--help:显示帮助

▪ -n、--quiet或slient:表示仅显示处理后的结果

-i:直接编辑文本文件

常见的操作包括:

▪ a:增加,在当前行下面增加一行指定内容

▪ c:替换,将选定行替换为指定内容

▪ d:删除,删除选定的行

▪ i:插入,在选定行上面插入一行指定内容

▪ p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCLL码输出

▪ s:替换,替换指定字符

▪ y:字符转换

2.用法示例

(1)输出符合条件的文本(p表示正常输出)

sed与正则表达式结合使用示例:

(2)删除符合条件的文本(d)(结合nl命令)

(3)替换符合条件的文本

s(字符串替换) c(整行/整块替换) y(字符串转换)

示例:

(4)迁移符合条件的文本

▪ H:复制到剪贴板

▪ g、G:将剪贴板中的数据覆盖/追加至指定行

▪ W:保存为文件

▪ r:读取指定文件

▪ a:追加指定内容

示例:

(5)使用脚本编辑文件

使用sed脚本将多个编辑指令存放到文件中,通过“-f”选项来调用

(6)sed直接操作文件示例

awk工具

1.awk常见用法

awk包含几个特殊的内建变量:

▪ FS:指定每行文本的字段分隔符,默认为空格或制表位

▪ NF:当前处理的行的字段个数

▪ NR:当前处理的行的行数(序数)

▪ $0:当前处理的行的整行内容

▪ $n:当前处理行的第n个字段(第n列)

▪ FINENAME:被处理的文件名

▪ RS:数据记录分割,默认为\n,即每行为一条记录

2.用法示例

(1)按行输出文本

(2)按字段输出文本

(3)通过管道、双引号调用shell命令

sort工具

sort命令的语法为“sort[选项]参数”,常用的选项包括:

▪ -f:忽略大小写

▪ -b:忽略每行前面的空格

▪ -M:按照月份进行排序

▪ -n:按照数字进行排序

▪ -r:反向排序

▪ -u:等同于uniq,表示相同的数据仅显示一行

▪ -t:指定分隔符,默认使用[tap]键分割

▪ -o:将排序后的结果转存至指定文件

▪ -k:指定排序区域

示例:

1 将/etc/passwd文件中的账号进行排序

2 将/etc/passwd文件中的第三列进行反向排序

3 将/etc/passwd文件中的第三列进行排序,并输出内容保存至uers.txt文件中

uniq工具

具体的命令语法格式为:uniq[选项]参数。其中常用选项:

▪ -c:进行计数

▪ -d:仅显示重复行

▪ -u:仅显示出现一次的行

示例:

1 删除testfile文件中的重复行

2 删除testfile文件中的重复行,并在行首显示该行重复出现的次数

3 查找testfile文件中的重复行

tr工具

tr具体的命令语法格式为tr[选项][参数]

其常用的选项:

▪ -c:取代所有不属于第一字符集的字符

▪ -d:删除所有属于第一字符集的字符

▪ -s:把连续重复的字符以单独一个字符表示

▪ -t:先删除第一字符集较第二字符集多出的字符

示例:

1 将输入字符由大写转换为小写

2 压缩输入中重复的字符

3 删除字符串中某些字符

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值