目录
引言
当学会了使用循环语句和函数的时候,灵活运用正则表达式,可以更快速、更高效的使用循环语句和函数,方便管理人员的操作。
一、正则表达式
1、正则表达式定义
(1)正则表达式,又称正规表达式、常规表达式。
(2)通常被用来检索、替换那些符合某个模式(规则)的文本。
(3)正则表达式不只有一种,而且LINUX中不同的程序可能会使用不同的正则表达式,如:grep sed awk egrep。
(4)使用字符串来描述、匹配一系列符合某个规则的字符串。
(5)正则表达式组成:
①普通字符:大小写字母、数字、标点符号及一些其他字符;
②元字符:在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式
2、基础正则表达式(BRE)
(1)基础正则表达式是常用的正则表达式部分。
(2)除了普通字符外,常用到以下元字符:
①\:转义符,将特殊字符进行转义,忽略其特殊意义a\.b匹配a.b,但不能匹配ajb,.被转义为特殊意义。
②^:匹配行首,^则是匹配字符串的开始^tux匹配以tux开头的行。
③$:匹配行尾,$则是匹配字符串的结尾tux$匹配以tux结尾的行。
④.:匹配除换行符\n之外的任意单个字符,awk则中可以ab.匹配abc或bad,不可匹配abcd或abde,只能匹配单字符。
⑤[]:匹配列表中的一个字符 例: go[ola]d,[abc]、[a-z]、[a-z0-9]。
⑥[^]:匹配任意不在列表中的一个字符 例: [^a-z]、[^0-9]、[^A-Z0-9]。
⑦*:匹配前面子表达式0次或者多次,例:goo*d、go.*d。
⑧\{n\} :匹配前面的子表达式n次,例:go\{2\}d、'[O-9]\{2\}'匹配两位数字。
⑨\{n,\}:匹配前面的子表达式不少于n次,例: go\{2,\}d、' [0-9]\{2,\}'匹配两位及两位以上数宁。
⑩\{n,m\}﹔匹配前面的子表达式n到m次,例: go\{2,3\)d、'[0-9]\{2,3\}'匹配两位到三位数字。
3、扩展正则表达式(ERE)
(1)扩展正则表达式是对基础正则表达式的扩充深化。
(2)扩展元字符:
①+的作用:重复一个或者一个以上的前一个字符。
示例:执行“egrep -n 'wo+d' test.txt”命令,即可查询"wood" "woood" "woooooood"等字符串。
②?的作用:零个或者一个的前一个字符。
示例:执行“egrep -n 'bes?t' test.txt”命令,即可查询“bet”“best”这两个字符串。
③|的作用:使用或者(or)的方式找出多个字符。
示例:执行“egrep -n 'of|is|on' test.txt”命令即可查询"of"或者"if"或者"on"字符串。
④()的作用:查找“组”字符串。
示例:“egrep -n 't(a|e)st' test.txt”。“tast”与“test”因为这两个单词的“t”与“st”是重复的,所以将“a”与“e”。列于“()”符号当中,并以“|”分隔,即可查询"tast"或者"test"字符串
⑤()的+作用:辨别多个重复的组。
示例:“egrep -n 'A(xyz)+C' test.txt”。该命令是查询开头的"A"结尾是"C",中间有一个以上的"xyz"字符串的意思。
二、文件处理器
1、grep
(1)grep命令是文本搜索命令,它可以正则表达式搜索文本,也可从一个文件中的内容作为搜索关键字。
(2)grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。
(3)常用选项:
-a :将 binary 文件以 text 文件的方式搜寻数据;
-c :计算找到 '搜寻字符串' 的次数;
-i :忽略大小写的不同,所以大小写视为相同;
-n :顺便输出行号;
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行;
--color=auto :可以将找到的关键词部分加上颜色的显示喔。
[root@localhost ~]# grep -n 'the' test.txt //刷选文件中包含the的行
[root@localhost ~]# grep -vn 'the' test.txt //刷选文件中不包含the的行
[root@localhost ~]# grep -in 'the' test.txt //刷选文件中包含the的行,不区分大小写
[root@localhost ~]# grep -n 'sh[io]rt' test.txt //刷选出文件中包含shirt或short字符串的行
[root@localhost ~]# grep -n 'oo' test.txt //筛选出字符串中包含两个oo的行
[root@localhost ~]# grep -n '[^w]oo' test.txt //筛选出除了w开头后面有两个o的字符串的行
[root@localhost ~]# grep -n 'ooo' test.txt //筛选出包含三个o的字符串的行
[root@localhost ~]# grep -n 'ooo*' test.txt //筛选出有两个o以上字符串的行
[root@localhost ~]# grep -n 'woo*d' test.txt //筛选出wd中间至少有一个o的字符串的行
[root@localhost ~]# grep -n '[0-9]*' test.txt //筛选出包含0-9中数字的字符串的行
[root@localhost ~]# grep -n 'o\{2\}' test.txt //筛选出有连续两个o的字符串的行
[root@localhost ~]# grep -n 'wo\{2,5\}d' test.txt
[root@localhost ~]# grep -n 'wo\{2,\}d' test.txt
[root@localhost ~]# egrep -n 'wo+d' test.txt //查询文件中wd中间有一个或以上的字符串的行
[root@localhost ~]# egrep -n 'bes?t' test.txt //查询文件中包含bet或best字符的行
[root@localhost ~]# egrep -n 'of|is|on' test.txt //查询文件中包含of或者is或者on字符的行
[root@localhost ~]# egrep -n 't(a|e)st' test.txt //查询文件中包含tast或者test字符的行
[root@localhost ~]# egrep -n 'A(xyz)+C' test.txt //查询文件中以A开头C结尾中间有一个以上xyz字符的行
2、sed
(1)sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。sed 也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于 Shell 脚本中,用以完成各种自动化处理任务。
(2)sed 的工作流程主要包括读取、执行和显示三个过程。
读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。
执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行。
显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。
在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。
注意:默认情况下所有的 sed 命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。
(3)sed 命令常见用法
通常情况下调用 sed 命令有两种格式,如下所示。其中,“参数”是指操作的目标文件, 当存在多个操作对象时用,文件之间用逗号“,”分隔;而 scriptfile 表示脚本文件,需要用“-f” 选项指定,当脚本文件出现在目标文件之前时,表示通过指定的脚本文件来处理输入的目标文件。
sed:①将文件里面的内容逐行取出数据放进模式空间;②在模式空间下匹配条件进行数据处理;③处理完数据之后再从模式空间中取出数据到屏幕上。
sed [选项] '操作' 参数
sed [选项] -f scriptfile 参数
(4)常用选项
-e:执行多个命令时使用,执行一个时可以省略
-n:只输出处理后的行,读入时不显示
-r:表示使用扩展正则表达式
-i:直接编辑文件,不输出结果
-f:用指定的脚本来处理输入的文本文件
匹配模式
a:追加 ,向匹配行后面插入内容
c:更改,更改匹配行整行的内容
i:插入,向匹配行前插入内容/忽略大小写(写在后面)
d:删除,删除匹配的内容
s:替换 ,替换掉匹配的内容
p:打印 ,打印出匹配的内容,通常与-n选项和用
=:用来打印被匹配的行的行号
n:读取下一行,遇到n时会自动跳入下一行
r,w:读和写编辑命令,r用于将其他文件内容读入本文件,w用于将匹配内容写入到其他文件
g:全局操作
q:退出
[root@localhost ~]# sed -n '3p' test.txt //显示第3行
[root@localhost ~]# sed -n 'p;n' test.txt //显示奇数行
[root@localhost ~]# sed -n 'n;p' test.txt //显示偶数行
[root@localhost ~]# sed -n '1,5{p;n}' test.txt //显示奇数行
[root@localhost ~]# sed -n '5,${p;n}' test.txt //显示奇数行
[root@localhost ~]# sed -n '6,${p;n}' test.txt //显示偶数行
[root@localhost ~]# sed -n '/the/p' test.txt //显示有the行
[root@localhost ~]# sed -n '4,/the/p' test.txt
[root@localhost ~]# sed -n '/the/=' test.txt
[root@localhost ~]# sed -n '/^PI/p' test.txt
[root@localhost ~]# sed -n '/\<wood\>/p' test.txt
[root@localhost ~]# sed -n -e 'p' 1.txt //显示打印所有内容
[root@localhost ~]# sed -n -e '=' 1.txt //打印行号
[root@localhost ~]# sed -n -e 'l' 1.txt //打印所有内容,包括非打印字符,以ASCII码输出
[root@localhost ~]# sed -n -e '=;p' 1.txt //打印行号以及所有内容
[root@localhost ~]# sed -n -e '=' -e 'p' 1.txt
[root@localhost ~]# nl test.txt | sed '3d' //删除第3行
[root@localhost ~]# nl test.txt | sed '3,5d' //删除3-5行
[root@localhost ~]# nl test.txt | sed '/cross/d' //删除包含cross的行
[root@localhost ~]# nl test.txt | sed '/cross/!d' //删除不包含cross的行
[root@localhost ~]# sed ‘/^[a-z]/d’ test.txt //删除以小写字母开头的行
[root@localhost ~]# sed '/\.$/d' test.txt //删除以.结尾的行
[root@localhost ~]# sed '/^$/d' test.txt //删除空行
[root@localhost ~]# sed 's/the/THE/' test.txt //将每行中的第一个the替换成THE
[root@localhost ~]# sed 's/l/L/2' test.txt //将每行中的第2个l替换为L
[root@localhost ~]# sed 's/the/THE/g' test.txt //将文件中的所有the替换为THE
[root@localhost ~]# sed 's/o//g' test.txt //将文件中的所有o删除(替换为空串)
[root@localhost ~]# sed 's/^/#/' test.txt //在每行行首插入#号
[root@localhost ~]# sed '/the/s/^/#/' test.txt //在包含the的每行行首插入#号
[root@localhost ~]# sed 's/$/EOF/' test.txt //在每行行尾插入字符串EOF
[root@localhost ~]# sed '3,5s/the/THE/g' test.txt //将第3-5行中的所有the替换成THE
[root@localhost ~]# sed '/the/s/o/O/g' test.txt //将包含the的所有行中的o都替换成O
[root@localhost ~]# sed '/the/{H;d};$G' test.txt //将包含the的行迁移至文件末尾,{;}用于多个操作
[root@localhost ~]# sed '1,5{H;d};17G' test.txt //将第1-5行内容转移到17行后
[root@localhost ~]# sed '/the/w out.file' test.txt //将包含the的行另存为文件out.file
[root@localhost ~]# sed '/the/r /etc/hostname' test.txt //将文件/etc/hostname的内容添加到包含the的每行以后
[root@localhost ~]# sed '3aNew' test.txt //在第3行后插入一个新行,内容为New
[root@localhost ~]# sed '/the/aNew' test.txt //在包含the的每行后插入一个新行,内容为New
[root@localhost ~]# sed '3aNew\nNew2' test.txt //在第三行后插入多行内容,中间的\n表示换行
DNS脚本
[root@localhost ~]# vim BIND.sh
#!/bin/bash
rpm -q bind > /dev/null
if [ $? -ne 0 ];then
yum install bind -y &> /dev/null
systemctl start named
else
systemctl start named
fi
sed -i '13s/127.0.0.1/192.168.32.128/' /etc/named.conf
sed -i '21s/localhost/any/' /etc/named.conf
sed -i '24azone "qaz.com" IN {\n type master;\n file "qaz.com.zone";\n allow-update { none; };\n };' /etc/named.rfc1912.zones
cd /var/named
cp -p named.localhost qaz.com.zone
sed -i '2s/@ rname.invalid./qaz.com. admin.qaz.com./' qaz.com.zone
sed -i '8s/@/qaz.com./' qaz.com.zone
sed -i '9s/127.0.0.1/192.168.32.128/' qaz.com.zone
sed -i '10d' qaz.com.zone
sed -i '9aIN MX 10 mail.qaz.com.\nwww IN A 192.168.32.128\nftp IN A 192.168.32.128' qaz.com.zone
systemctl stop firewalld.service
setenforce 0 &> /dev/null
systemctl restart named
echo "nameserver 192.168.32.128" > /etc/resolv.conf
:wq
[root@localhost ~]# nslookup www.qaz.com
Server: 192.168.32.128
Address: 192.168.32.128#53
Name: www.qaz.com
Address: 192.168.32.128
[root@localhost ~]# nslookup ftp.qaz.com
Server: 192.168.32.128
Address: 192.168.32.128#53
Name: ftp.qaz.com
Address: 192.168.32.128
3.awk
(1)概述
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描、过滤、统计汇总工作,数据可以来自标准输入也可以是管道或文件,20世纪70年代诞生于贝尔实验室,现在CentOS7用的是gawk,之所以叫 AWK 是因为其取了三位创始人Alfred Aho,Peter Weinberger,和Brian Kernighan的Family Name的首字符。
(2)工作原理
当读到第一行时,匹配条件,然后执行指定动作,再接着读取第二行数据处理,不会默认输出,如果没有定义匹配条件默认是匹配所有数据行,awk隐含循环,条件匹配多少次动作就会执行多少次。
(3)命令格式
awk 选项 '模式或条件{操作}' 文件1 文件2 ...
awk -f 脚本文件 文件1 文件2 ..
(4)内置变量
FS:指定每行文本的字段分隔符,默认为空格或制表位。
NF:当前处理的行的字段个数。
NR:当前处理的行的行号(序数)。
$0:当前处理的行的整行内容。
$n:当前处理行的第 n 个字段(第 n 列)。
FILENAME:被处理的文件名。
[root@localhost ~]# awk ‘{print}’ test.txt //输出所有内容,等同于cat test.txt
[root@localhost ~]# awk ‘{print $0}’ test.txt //输出所有内容
[root@localhost ~]# awk ‘NR==1,NR==3{print}’ test.txt //输出第1~3行内容
[root@localhost ~]# awk ‘(NR>=1)&&(NR<=3){print}’ test.txt //输出第1~3行内容
[root@localhost ~]# awk ‘NR==1 || NR==3{print}’ test.txt //输出第1行第3行内容
[root@localhost ~]# awk ‘(NR%2)==1{print}’ test.txt //输出奇数行内容
[root@localhost ~]# awk ‘(NR%2)==0{print}’ test.txt //输出偶数行内容
[root@localhost ~]# awk ‘/^root/{print}’ /etc/passwd //输出以root开头的行
[root@localhost ~]# awk ‘/nologin$/{print}’ /etc/passwd //输出以nologin结尾的行
[root@localhost ~]# awk ‘BEGIN {x=0};/\/bin\/bash$/{x++};END {printx}’ /etc/passwd //统计以/bin/bash结尾的内容
[root@localhost ~]# awk ‘BEGIN{RS=””};END{print NR}’ test.txt //统计以空行分隔的文本段落数
[root@localhost ~]# awk ‘{print $3}’ test.txt //输出每行的第3个字段
[root@localhost ~]# awk ‘{print $1,$3}’ test.txt //输出每行的第1、3个字段
[root@localhost ~]# awk -F: ‘$2==””{print}’ /etc/shadow //输出密码为空的用户
[root@localhost ~]# awk ‘BEGIN {FS=”:”};$2==””{print}’ /etc/shadow //输出密码为空的用户
[root@localhost ~]# awk -F: ‘$7~”/bash”{print $1}’ /etc/passwd //输出以冒号分隔且第7个字段中包含/bash的行的第1个字段
[root@localhost ~]# awk -F: ‘($7!=”/bin/bash”)&&($7!=”/sbin/nologin”){print}}’ /etc/passwd //输出第7个字段即不为/bin/bash,也不为/sbin/nologin的所有行
[root@localhost ~]# awk ‘($1~”nfs”)&&(NF==8){print $1,$2}’ /etc/services //输出包含8个字段且第1个字段中包含nfs的行的第1、2个字段
[root@localhost ~]# awk -F: ‘/bash$/{print | “wc -l”}’ /etc/passwd //调用wc -l命令统计使用bash的个数,等同于grep -c “bash$” /etc/passwd
[root@localhost ~]# awk ‘BEGIN {while (“w” | getline)n++;{print n-2}}’ //调用w命令,并用来统计在线用户数
[root@localhost ~]# awk ‘BEGIN {“hostname” | getline;print $0}’ //调用hostname,并输出当前的主机名
[root@localhost /]# vim FW1.sh
#!/bin/bash
x=`awk '/Failed password/{ip[$11]++}END{for(i in ip){print i ","ip[1]}}' /var/log/secure`
for j in $x
do
ip=`echo $j | awk -F "," '{print $1}'`
num=`echo $j | awk-F "," '{print $2]'`
if [ $num -ge 3 ] ; then
echo "敬告!$ip访问本机失败了$num次,请尽快处理!"
fi
done
三、常用的文件工具
1、cut
(1)使用说明:cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一,cut只擅长于处理单个字符为间隔的文本。
(2)选项
-b:按字节截取;
-c:按字符截取,常用于中文;
-d:指定以什么为分隔符截取,默认为制表符;
-f:通常和-d一起。
[root@localhost ~]# cat /etc/passwd | cut -d':' -f 1
root
bin
daemon
adm
lp
[root@localhost ~]# cat /etc/passwd | cut -d':' -f 3
0
1
2
3
4
[root@localhost ~]# cat /etc/passwd | cut -d':' -f1,3
root:0
bin:1
daemon:2
adm:3
lp:4
[root@localhost ~]# who | cut -b 3
o
[root@localhost ~]# who | cut -c 3
o
2、sort
(1)是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序。例如数据和字符的排序就不一样。
(2)语法:sort [选项] 参数
(3)常用选项
-t:指定分隔符,默认使用[Tab]键或空格分隔
-k:指定排序区域,哪个区间排序
-n:按照数字进行排序,默认是以文字形式排序
-u:等同于 uniq,表示相同的数据仅显示一行,注意:如果行尾有空格去重就不成功
-r:反向排序,默认是升序,-r就是降序
-o:将排序后的结果转存至指定文件
[root@localhost etc]# sort passwd //不加任何选项默认按第一列升序,字母的话就是从a到z由上而下显示
abrt:x:173:173::/etc/abrt:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologi
nbin:x:1:1:bin:/bin:/sbin/nologin
chrony:x:993:988::/var/lib/chrony:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
[root@localhost etc]# sort -n -t: -k3 passwd //以冒号为分隔符,以数字大小对第三列排序(升序)
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@localhost etc]# sort -nr -t: -k3 passwd //以冒号为分隔符,以数字大小对第三列排序(降序)
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:
/sbin/nologincolord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
gluster:x:996:993:GlusterFS daemons:/run/gluster:/sbin/nologin
[root@localhost etc]# sort -u passwd //去掉文件中重复的行(重复的行可以是不连续的)
3、uniq
(1)主要用于去除连续的重复行
注意:是连续的行,所以通常和sort结合使用先排序使之变成连续的行再执行去重操作,否则不连续的重复行他不能去重。
(2)语法:uniq [选项] 参数
(3)常用选项
-c:对重复的行进行计数;
-d:仅显示重复行;
-u:仅显示出现一次的行
[root@localhost /]# cat fruit | uniq -c //统计重复行的次数,不连续的重复行他不算做重复行
2 apple
1 peache
1 pear
1 banana
2 cherry
1 banana
1 orange
[root@localhost /]# cat fruit | sort | uniq -c //结合sort使用就是我们想要的效果
2 apple
2 banana
2 cherry
1 orange
1 peache
1 pear
[root@localhost /]# cat fruit | sort | uniq -d //结合sort使用,过滤出重复行
apple
banana
cherry
[root@localhost /]# cat fruit | sort | uniq -u //结合sort使用,过滤出不重复的行
orange
peache
pear
[root@localhost /]# cat fruit | sort | uniq //结合sort使用,去重
apple
banana
cherry
orange
peache
pear
[root@localhost /]# cat fruit | sort -u //也可以直接用sort -u
apple
banana
cherry
orange
peache
pear
4、tr
(1)它可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符。
(2)语法:tr [选项]… SET1 [SET2]
从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。
(3)常用选项
-d 删除字符
-s 删除所有重复出现的字符,只保留第一个
[root@localhost /]# cat fruit | tr 'apple' 'APPLE' //替换是一一对应的字母的替换
APPLE
APPLE
PEAchE
PEAr
bAnAnA
chErry
chErry
bAnAnA
orAngE
[root@localhost /]# cat fruit | tr 'a' ' ' //把替换的字符用单引号引起来,包括特殊字符
pple
pple
pe che
pe r
b n n
cherry
cherry
b n n
or nge
[root@localhost /]# cat fruit | tr 'a' '/'
/pple
/pple
pe/che
pe/r
b/n/n/
cherry
cherry
b/n/n/
or/nge
[root@localhost /]# cat fruit | tr 'ap' '/' //多个字符替换成一个
///le
///le
/e/che
/e/r
b/n/n/
cherry
cherry
b/n/n/
or/nge
[root@localhost /]# cat fruit | tr 'apple' 'star' //a替换成s,p替换成a,le替换成r
saarr
saarr
arschr
arsr
bsnsns
chrrry
chrrry
bsnsns
orsngr
[root@localhost /]# cat fruit | tr "'" '/' //如果想替换单引号则需要用双引号把单引号引起来,反斜杠转义也不行
apple
apple
peache
pear
banana
cherry
cherry
banana
orange
[root@localhost /]# cat fruit | tr -d 'a' //删除所有a
pple
pple
peche
per
bnn
cherry
cherry
bnn
ornge
[root@localhost /]# cat fruit | tr -d 'apple' //把所有含有这5个字母的都删除
ch
r
bnn
chrry
chrry
bnn
orng
[root@localhost /]# cat fruit | tr -d '\n' //删除换行符
appleapplepeachepearbananacherrycherrybananaorange[root@localhost /]#
[root@localhost /]# cat fruit | tr -s 'p' //对p字符去重,只保留第一个
aple
aple
peache
pear
banana
cherry
cherry
banana
orange
[root@localhost /]# cat fruit | tr -s '\n' //遇到多个回车只保留一个回车,相当于去除空行
apple
apple
peache
pear
banana
cherry
cherry
banana
orange
总结
1、正则表达式,又称正规表达式、常规表达式;用来检索、替换那些符合某个模式(规则)的文本,分为基础正则表达式(BRE)和扩展正则表达式(ERE)。
2、grep命令是文本搜索命令,它可以正则表达式搜索文本,也可从一个文件中的内容作为搜索关键字。
3、sed是文本处理工具,可以读取文本内容,根据指定条件对数据进行删除、替换、添加、移动等操作,被广泛应用于Shell脚本。
4、awk是一个功能强大的编辑安装工具,用于在Linux下对文本和数据进行处理。
5、常用的文件排序工具:cut、sort、uniq、tr。