ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2021-09-14 14:05:28  阅读:159  来源: 互联网

标签:文件 Shell 正则表达式 编程 sed test txt root localhost


目录

引言

一、正则表达式

1、正则表达式定义

2、基础正则表达式(BRE)

3、扩展正则表达式(ERE)

二、文件处理器

1、grep

2、sed

3.awk

三、常用的文件工具

1、cut

2、sort 

3、uniq

4、tr

总结


引言

当学会了使用循环语句和函数的时候,灵活运用正则表达式,可以更快速、更高效的使用循环语句和函数,方便管理人员的操作。

一、正则表达式

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。

标签:文件,Shell,正则表达式,编程,sed,test,txt,root,localhost
来源: https://blog.csdn.net/Wan_JF/article/details/120282119

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有