Linux之sed命令的基本使用

系列文章目录

第一章 正则表达式,一张表教你学会
第二章 Linux之awk的进阶使用
第三章 Linux之sed命令的基本使用
第四章 Linux之grep、egrep命令(文本三剑客完)


sed 替换、删除

sed 非交互式流编辑器 --stream editor

格式:sed [options] 'command' file

常用选项

-i:直接对原文件进行操作

-r:支持扩展正则表达式

-n:只显示匹配处理的行

-e:执行多个编辑命令时(一般用;代替)

-f:执行脚本文件中的命令,脚本文件中一行一条命令

常用编辑命令

p:打印匹配行 --print 1,5p:输出1到5行;$p:最后1行;3,5!p:取反输出除3~5行之外的行;2~3p,每隔3行取2行

d:删除指定行 --delete

[root@localhost 76]# cat fan.txt
wo ai chi fan ming
liu ming   liu ming
[root@localhost 76]# sed -i '/liu ming/d' fan.txt
[root@localhost 76]# cat fan.txt
wo ai chi fan ming

a:在匹配行后面追加 --append

i:在匹配行前面插入 --insert

[root@localhost 76]# sed -i '1i  zhaojunjie wangshenghu zhengyang' fan.txt	# a是在下面插入一行,i是在上面插入一行
[root@localhost 76]# cat fan.txt
zhaojunjie wangshenghu zhengyang
wo ai chi fan ming
shenjiemi

c:整行替换, 70c 第70行 ; /cs/c 包含cs的行

[root@localhost 76]# cat fan.txt
zhaojunjie
chenxiongwei zhouyiwei
[root@localhost 76]# sed -i '2c liuchang zhangchang' fan.txt
[root@localhost 76]# cat fan.txt
zhaojunjie
liuchang zhangchang

s:字符串替换(匹配正则表达式) --substitution

s命令的格式是 s/regexp/replacement/flags ,其中:

- regexp 是一个正则表达式,用于匹配模式空间中的文本。
- replacement 是一个替换字符串,用于替换匹配到的文本。
- flags 是一些选项,用于控制替换的行为。

replacement中可以使用&来表示匹配到的字符,常常用于模糊匹配
: echo "i am fat ,i have a cat" | sed 's/.at/"&"/g'
i am "fat" ,i have a "cat"
也可以使用"\+数字"的方式表示具体的匹配分组,搭配"()"分组来进行使用
: echo aaa bbb ccc | sed -r 's/([a-z]+) ([a-z]+) ([a-z]+)/\3 \2 \1/'
ccc bbb aaa
开头插入,结尾追加可以用分别用 ^ $ 表示
: cat test.txt 
xw 123
xw 222
clb 444
: sed -i '1,2 s/^/#/' test.txt
: cat test.txt 
#xw 123
#xw 222
clb 444
: sed -i '1,2 s/$/hello/' test.txt
: cat test.txt 
#xw 123hello
#xw 222hello
clb 444

s命令的flags有以下几种:
数字:表示将匹配到的第n个数字进行替换
g:表示全局替换,即替换每一行中所有匹配到的文本。	--global
ng:表示包括第n个之后的都替换
p:表示打印替换后的行,通常和-n选项配合使用。
w file:表示把替换后的行写入到文件file中。
i:表示忽略大小写,即匹配时不区分大小写。
m:表示多行模式,即允许正则表达式匹配多行文本。

当需要匹配的内容包含/时,可以选择用其他字符作为分隔符
: sed -n '/mengmeng/ s#/bin/bash#/sbin/nologin#' passwd

N:读取下一行到pattern空间,用于对多行同时进行操作

1.自己编辑一个文件test.txt,内容如下:
0.0.0.0
1.1.1.1
2.2.2.2
输出以下形式:
0.0.0.0:80,1.1.1.1:80,2.2.2.2:80
[root@localhost 76]# sed -i 'N;N;s/\n/:80,/g;s/$/:80/' test.txt		# 后一个s命令用来补充最后一行的:80

=:输出行号

r:将文件的内容读入 --read

sed '$r xw.txt' ly.txt	# 将xw.txt文件的内容追加到ly文件的末尾

w:将文本写入文件 --write

sed '1w xw.txt' ly.txt	# 将ly.txt文件第1行的内容写到xw.txt文件,会覆盖xw.txt文件原本的内容

例:替换,将以 fan 开头的行中的所有 fan 替换为 liu

[root@localhost 76]# cat fan.txt
wo ai chi fan ming you
fan ming you  fan ming you
[root@localhost 76]# sed -i '/^fan/ s/fan/liu/g' fan.txt
[root@localhost 76]# cat fan.txt
wo ai chi fan ming you
liu ming you  liu ming you

例:删除,将所有的 you 删除

[root@localhost 76]# sed -i 's/you//g' fan.txt
[root@localhost 76]# cat fan.txt
wo ai chi fan ming
liu ming   liu ming

练习

不要直接对下面的源文件进行操作,建议复制到当前文件夹里进行

1.sed取出/etc/passwd文件的第一列

sed -n '1p' /etc/passwd

2.sed将PATH环境变量中的冒号换成换行 ->可以将PATH变量的内容重定向到一个文件里,例如path.txt

sed 's/:/\n/g' path.txt

3.sed将PATH环境变量斜杠/换成斜杠\

sed 's/\//\\/g' path.txt

4.sed修改SELINUX配置文件从开启(enforcing)变成禁用(disabled)
/etc/sysconfig/selinux

sed -n '/^SELINUX=/ s/enforcing/disabled/' /etc/sysconfig/selinux

5.去掉/etc/passwd文件中第二个字段的x

sed -r 's/^(.*:)x/\1/' /etc/passwd

6.将/etc/sysconfig/network-scripts/ifcfg-ens33里的ONBOOT=no修改为yes或者修改下IPADDR后面的ip地址,具体ip自己定义

cat /etc/sysconfig/network-scripts/ifcfg-ens33 |sed -rn '/^ONBOOT=/ s/no/yes/p;/^DEFROUTE=/ s/yes/no/p'

7.只显示ip add的ip地址

ip add | sed -nr '/inet /s/.*inet ([0-9.]+).*/\1/p'	# 得到所有的IP地址
ip add | sed -nr '/inet /s/.*inet ([0-9.]+).*ens33$/\1/p'	# 得到ens33网卡的IP地址
ip add| sed -nr 's/(^.*inet) (([0-9][0-9]?[0-9]?.){3}[0-9][0-9]?[0-9]?).*(ens33$)/\2/p'	# 低级写法

8.复制/etc/ssh/sshd_config到当前目录下,修改里面的端口号修改为8899
将#Port 22 配置修改为Port 8899 要求去掉前面的#号,将22修改为8899

egrep 'Port 22' /etc/ssh/sshd_config|sed 's/^#//;s/22/8899/'

9.给下列含有大写字母的行,在大写字母后追加数字2022 --》sed
abcdSdddde
islHishbxld
goBkefji
daanshXxge

sed '/[A-Z]/s/[A-Z]/&2022/' tpm.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值