正则表达式
▪ 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 删除字符串中某些字符