首页 > 其他分享 >sed

sed

时间:2023-01-12 20:55:25浏览次数:50  
标签:10 rocky seq sed root Rocky8

原理

帮助参考网站:http://www.gnu.org/software/sed/manual/sed.html

用法

格式:

sed [option]... ‘script;script;…’ [inputfile]

inputfile:可省略,sed作为标准输入,以自己的语法格式做处理

选项:

-n   不输出至屏幕上禁止自动打印

-i.bak 备份文件为file.bak,并修改原文件,不加.bak会直接修改原文件

-f FILE  从指定文件中读取编辑脚本

-r ;-E   使用扩展的正则表达式

-s     将多个文件视为独立文件,而不是单个连续的长文件流

script格式:

‘地址和命令’

地址格式:

(1)	不给地址:对全文进行处理

(2)	单地址:
#:指定的行,$:最后的行
/pattern/:被模式所能匹配到的行

(3)	地址范围:
#,#:从#行到#行
#,+#:从#到+#行
/pat1/,/pat2/:
/pat1/,#

(4)	步进:~
1~2:奇数行
2~2:偶数行

命令格式:

p  打印

Ip  忽略大小写

d  删除

a TEXT 在地址匹配到的当前行追加TEXT内容

i TEXT  在地址匹配到的当前行前面插入TEXT内容

c TEXT 在地址匹配到的当前行替换插入TEXT内容

w filename   保存模式匹配的行至指定文件中

r filename    读取指定文件的文本追加至地址匹配到的行后面

!       匹配行取反

q     结束或退出sed

范例:

1、打印指定行,取消自动打印

[root@rocky ~]#seq 10 | sed '2p'
1
2
2
3
4
5
6
7
8
9
10

[root@rocky ~]#seq 10 | sed -n  '2p'
2

[root@rocky ~]#seq 10 | sed -n  '2,6p'
2
3
4
5
6

[root@rocky ~]#seq 10 | sed -n  '5,$p'
5
6
7
8
9
10

2、删除某行或范围行

[root@rocky ~]#seq 10 | sed  '5,$d'
1
2
3
4

3、打印某文件非#开头的行

[root@rocky ~]#sed -n '/^[^#]/p' /etc/profile

[root@rocky ~]#sed '/^#/d' /etc/profile

4、打印奇数行

[root@Rocky8 ~]# seq 10 |sed -n '1~2p'
=[root@Rocky8 ~]# seq 10 |sed -n '2~2!p'
=[root@Rocky8 ~]# seq 10 |sed  '2~2d'
1
3
5
7
9

5、打印偶数行

[root@Rocky8 ~]# seq 10 |sed -n '2~2p'
=[root@Rocky8 ~]# seq 10 |sed -n '1~2!p'
=[root@Rocky8 ~]# seq 10 |sed  '1~2d'
2
4
6
8
10

6、在某行的下一行追加内容 a

[root@rocky ~]#seq 5 | sed '2~2ahello'
1
2
hello
3
4
hello
5

7、将某行保存在文件中 #w

[root@Rocky8 ~]# seq 10 | sed  '3w /root/a.txt'
1
2
3
4
[root@Rocky8 ~]# cat a.txt
3

8、在指定行后追加内容 r file

[root@Rocky8 ~]# seq 10 |sed   '1~2r /etc/issue'
1
\S
Kernel \r on an \m

2
3
\S
Kernel \r on an \m

4
5
\S
Kernel \r on an \m

查找替换

s/pattern/string/修饰符  分割符可替换为:s@@@;s###

修饰符:

g  行内全局替换

p  显示替换成功的行

w  /PATH/FILE  将替换成功的行保存至文件中

I;i  忽略大小写
分组反向调用
\1,\2,…

范例

[root@Rocky8 ~]# echo 123456789 |sed -n -r  's/(123)(456)(789)/\2\1\3/gp'
456123789
[root@Rocky8 ~]# echo 123456789 |sed -n -r  's/(123)(456)(789)/\1\3/gp'
123789
[root@Rocky8 ~]# echo 123456789 |sed -n -r  's/(123)(456)(789)/\1abc\3/gp'
123abc789

提取IP地址

[root@rocky ~]#ifconfig eth0 | sed -n -r '2s/^.*inet +([0-9.]+)  netmask.*$/\1/p'
10.0.0.18

修改网卡名称

[root@rocky ~]#sed -i -r '/GRUB_CMDLINE_LINUX=/ s#(.*)"$#\1 ifnames=0"#'  /etc/default/grub

[root@rocky ~]#sed -i -r '/GRUB_CMDLINE_LINUX=/ s#"$# ifnames=0"#'  /etc/default/grub

 

标签:10,rocky,seq,sed,root,Rocky8
From: https://www.cnblogs.com/Lx-learner/p/17047892.html

相关文章