2/14(正则表达式、sed流式编辑器)

正则表达式

1.
在这里插入图片描述
head -5 /etc/passwd > user #准备素材

grep ^root user #找以root开头的行
grep bash$ user #找以bash结尾的行
grep ^$ user /#空行
grep -v ^$ user #显示除了空行的内容
grep “[root]” user #找r、o、t任意一个字符
grep “[rot]” user #效果同上
grep “[^rot]” user #显示r或o或t以外的内容
grep “[0123456789]” user #找所有数字
grep “[0-9]” user #效果同上
grep “[^0-9]” user #显示数字以外内容
grep “[a-z]” user #找所有小写字母
grep “[A-Z]” user #找所有大写字母
grep “[a-Z]” user #找所有字母
grep “[^0-9a-Z]” user #找所有符号

grep “.” user #找任意单个字符,文档中每个字符都可以理解为任意字符
grep “r…t” user #找rt之间有2个任意字符的行
grep “r.t” user #找rt之间有1个任意字符的行,没有匹配内容,就无输出
grep “" user #错误用法,号是匹配前一个字符任意次,不能单独使用
grep "ro
t" user #找rt,中间的o有没有都行,有几次都行
grep ".
” user #找任意,包括空行 .与*的组合在正则中相当于通配符的效果

grep “ro{1,2}t” user #找rt,中间的o可以有1~2个
grep “ro{2,6}t” user #找rt,中间的o可以有2~6个
grep “ro{1,}t” user #找rt,中间的o可以有1个以及1个以上
grep “ro{3}t” user #找rt,中间的o必须只有有3个

2.
\w匹配数字、字母、下划线
egrep “roo\w” user //找roo后面是数字、字母、下划线的字符串

\s 匹配空格、tab键
egrep “roo\s” user //找roo后面是1个空格或者tab键打出来的空格的字符串,如果没有
就不输出

3.
在这里插入图片描述
以上命令均可以加-E选项并且去掉所有\,改成扩展正则的用法,比如
grep “ro{1,}t” user可以改成 grep -E “ro{1,}t” user
或者egrep “ro{1,}t” user

grep “ro{1,}t” user #使用基本正则找o出现1次以及1次以上
egrep “ro{1,}t” user #使用扩展正则,效果同上,比较精简
egrep “ro+t” user #使用扩展正则,效果同上,最精简
grep “roo{0,1}t” user #使用基本正则找第二个o出现0~1次
egrep “roo{0,1}t” user #使用扩展正则,效果同上,比较精简
egrep “roo?t” user #使用扩展正则,效果同上,最精简

egrep “(😇{2}” user #找连续的2个0: 小括号的作用是将字符组合为一个整体

egrep “root|bin” user //找有root或者bin的行

egrep “the\b” abc.txt //在abc.txt文件中找the,右边不允许出
现数字、字母、下划线
egrep “\bthe\b” abc.txt //两边都不允许出现数字、字母、下划线
egrep “<the>” abc.txt //效果同上

sed 流式编辑器

1,前置指令 | sed 选项 条件 指令
2,sed 选项 条件 指令 被处理文档

选项 -n 屏蔽默认输出 -r 支持扩展正则 -i 修改源文件
指令 p 输出 d 删除 s 替换
条件 行号 /字符串/

1) p输出
sed -n ‘p’ user #输出所有行
sed -n ‘1p’ user #输出第1行
sed -n ‘2p’ user #输出第2行
sed -n ‘3p’ user #输出第3行

sed -n ‘2,4p’ user #输出2~4行
sed -n ‘2p;4p’ user #输出第2行与第4行

sed -n ‘3,+1p’ user #输出第3行以及后面1行

sed -n ‘/^root/p’ user #输出以root开头的行
sed -n ‘/root/p’ user #输出包含root的行
sed -nr ‘/root|bin/p’ user #输出以root开头的行或bin开头的行,|是扩展正则,需要r选项
sed -n ‘1!p’ user #输出除了第1行的内容,!是取反
sed -n 'KaTeX parse error: Expected 'EOF', got '#' at position 11: p' user #̲输出最后一行 sed -n '…=就是最后一行的行号
sed -n ‘$=’ user #输出文件的总行数

2) d 删除(如果去掉-n,在将p指令改成d指令就是删除)
删除第3~5行 sed ‘3,5d’ user
删除所有包含xml的行 sed ‘/xml/d’ user
删除不包含xml的行 sed ‘/xml/!d’ user
删除以install开头的行 sed ‘/^install/d’ user
删除文件的最后一行 sed ‘ d ′ u s e r 删 除 第 3   5 行 s e d ′ 3 , 5 d ′ a b c . t x t 删 除 所 有 包 含 x m l 的 行 s e d ′ / x m l / d ′ a b c . t x t 删 除 不 包 含 x m l 的 行 s e d ′ / x m l / ! d ′ a b c . t x t 删 除 以 i n s t a l l 开 头 的 行 s e d ′ / i n s t a l l / d ′ a b c . t x t 删 除 文 件 的 最 后 一 行 s e d ′ d' user 删除第3~5行 sed '3,5d' abc.txt 删除所有包含xml的行 sed '/xml/d' abc.txt 删除不包含xml的行 sed '/xml/!d' abc.txt 删除以install开头的行 sed '/^install/d' abc.txt 删除文件的最后一行 sed ' duser3 5sed3,5dabc.txtxmlsed/xml/dabc.txtxmlsed/xml/!dabc.txtinstallsed/install/dabc.txtsedd’ user
删除所有空行 sed ‘/^$/d’ user

3)s 替换
sed ‘s/2017/6666/’ shu.txt #把所有行的第1个2017替换成6666
sed ‘s/2017/6666/2’ shu.txt #把所有行的第2个2017替换成6666
sed ‘1s/2017/6666/’ shu.txt #把第1行的第1个2017替换成6666
sed ‘3s/2017/6666/3’ shu.txt #把第3行的第3个2017替换成6666
sed ‘s/2017/6666/g’ shu.txt #所有行的所有个2017都替换
sed ‘/2024/s/2017/6666/g’ shu.txt #找含有2024的行,将里面的所有2017替换成6666

4)a 行下追加
sed ‘a 666’ user #所有行的下面追加666
sed ‘1a 666’ user #第1行的下面追加666
sed ‘/^bin/a 666’ user #在以bin开头的行的下面追加666

5)i 行上添加
sed ‘i 666’ user #所有行的上面添加666
sed ‘5i 666’ user #第5行的上面添加666
sed ‘$i 666’ user #最后1行的上面添加666

6)c 替换整行
sed ‘c 666’ user //所有行都替换成666
sed ‘1c 666’ user //替换第1行为666

例子:如果想把 /bin/bash 替换成 /sbin/sh 怎么操作?
sed -i ‘1s/bin/sbin/’ user //传统方法可以一个一个换,先换一个
sed -i ‘1s/bash/sh/’ user //再换一个

sed ‘s!/bin/bash!/sbin/sh!’ user //最佳方案,更改s的替换符
sed ‘s(/bin/bash(/sbin/sh(’ user //替换符号可以用所有数字键上的

编写脚本,搭建httpd服务,用82号端口开启服务
在这里插入图片描述
yum -y install httpd &> /dev/null //安装网站
echo “sed-test~~~” > /var/www/html/index.html //定义默认页
sed -i ‘/^Listen 80/s/0/2/’ /etc/httpd/conf/httpd.conf //修改配置文件,将监听端口修改为82

然后运行脚本
curl 192.168.2.5:82 //脚本运行之后,测试82端口看到页面即可
sed-test~~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值