shell#正则表达式&sed

--字符串

字符串的初值(备用值),变量非空是不可使用

${变量名:-xxxxx}

-------------------------------------------------------------------------------------------------

一丶正则表达式

正则表达式 可以配合某工具对文档进行过滤筛选

head -5 > user

grep '^root' user   //以root开头的行 

grep 'bash$' user  //以bash结尾的行

grep '[0-9]' user  //筛选出0-9的数字

grep '[^0-9]' user //排除所有0-9的数字

grep 'roo.' user   //筛选roo开头的匹配单个字符

grep 'ro*t' user   //筛选出现任意次o的字符,可以是0次---rt  rot rooooot

像 小部件

grep "\(0:\)\{2\}" user  //筛选0:出现两次的字符串

扩展正则表达式

图像 小部件

二丶sed 流式编辑器

图像 小部件可以对文本文件进行非交互式增删改查,逐行处理

sed使用方式

1.前置命令|sed 选项 (定址符)指令o

2.sed 选项(定址符)指令 被处理文件

选项

        -n 屏蔽默认输出

         -r 支持扩展正则

         -i 写入文件

指令

         p 输出

         d 删除

         s 替换

[root@svr5 ~]# sed 'd' /etc/passwd                    //删除所有行

[root@svr5 ~]# cat /etc/passwd                         //查看原始文本,并未改动

[root@svr5 ~]# sed -i '1,4d' test.txt                    //删除操作

[root@svr5 ~]# cat test.txt                                  //确认删除结果

[root@svr5 ~]# sed -n 'p' a.txt            //输出所有行,等同于cat a.txt

[root@svr5 ~]# sed -n '4p' a.txt            //输出第4行

[root@svr5 ~]# sed -n '4,7p' a.txt        //输出第4~7行

[root@svr5 ~]# sed -n '4,+10p' a.txt        //输出第4行及其后的10行内容

[root@svr5 ~]# sed -n '/^bin/p' a.txt        //输出以bin开头的行

[root@svr5 ~]# sed -n '$=' a.txt            //输出文件的行数

[root@svr5 ~]# sed 's/xml/XML/' a.txt        //将每行中第一个xml替换为XML

[root@svr5 ~]# sed 's/xml/XML/3' a.txt     //将每行中的第3个xml替换为XML

[root@svr5 ~]# sed 's/xml/XML/g' a.txt     //将所有的xml都替换为XML

[root@svr5 ~]# sed 's/xml//g' a.txt     //将所有的xml都删除(替换为空串)

[root@svr5 ~]# sed 's#/bin/bash#/sbin/sh#' a.txt //将/bin/bash替换为/sbin/sh

[root@svr5 ~]# sed '4,7s/^/#/' a.txt         //将第4~7行注释掉(行首加#号)

[root@svr5 ~]# sed 's/^#an/an/' a.txt         //解除以#an开头的行的注释(去除行首的#号)

1)删除文件中每行的第二个、最后一个字符

分两次替换操作,第一次替换掉第2个字符,第二次替换掉最后一个字符:

[root@svr5 ~]# sed 's/.//2 ; s/.$//' nssw.txt

2)将文件中每行的第一个、倒数第1个字符互换

每行文本拆分为“第1个字符”、“中间的所有字符”、“倒数第1个字符”三个部分,然后通过替换操作重排顺序为“3-2-1”:

[root@svr5 ~]# sed -r 's/^(.)(.*)(.)$/\3\2\1/' nssw.txt

3)删除文件中所有的数字

因原文件内没有数字,行首也没有空格,这里稍作做一点处理,生成一个新测试文件:

[root@svr5 ~]# sed 's/[0-9]//' nssw.txt

4)为文件中每个大写字母添加括号

使用“()”可实现保留功能,所以可参考下列操作解决:

[root@svr5 ~]# sed -r 's/([A-Z])/[\1]/g' nssw.txt

删除所有数字、行首空格的操作如下:

[root@svr5 ~]# sed -r 's/[0-9]//g;s/^( )+//' nssw2.txt

案例

1)任务需求及思路分析

vsftpd服务的安装、改目录权限、起服务等操作可以直接写在脚本中。

修改vsftpd.conf配置的工作可以使用sed命令,根据默认配置,只需要定位到以#anon开头的行,去掉开头的注释即可。

2)根据实现思路编写脚本文件:

[root@svr5 ~]# vim anonftp.sh

#!/bin/bash

yum -y install vsftpd                             //安装vsftpd软件

cp /etc/vsftpd/vsftpd.conf{,.bak}                 //备份默认的配置文件

sed -i "s/^#anon/anon/" /etc/vsftpd/vsftpd.conf     //修改服务配置

chmod 777 /var/ftp/pub                             //调整目录权限

systemctl start vsftpd                             //启动服务

systemctl enable vsftpd                            //设为自动运行

[root@svr5 ~]# chmod +x anonftp.sh

[root@svr5 ~]# ./anonftp.sh

发布了13 篇原创文章 · 获赞 5 · 访问量 1199

猜你喜欢

转载自blog.csdn.net/Gus_lin/article/details/103868367