第三十一节 sed命令

sed
非交互性的文本流编辑器,它编辑文件或标准输入导出的文本拷贝,标准输入可能来自键盘,文件重定向,字符串,变量或者一个管道文本
注意:sed并不与初始化文件打交道,它操作的是一个拷贝,然后所有的改动如果没有重定向到一个文件,将输出到屏幕

sed命令的使用格式
[root@centos7-2 ~]# sed [-nefr] [动作]
# sed [option] scripts file1 file2 ...
# sed [option] 'AddressCommand' file1 file2 ...
Address:表示对哪些行进行处理
Command:操作命令
option选项:-nefr
sed命令 option选项:-nefr

-n :不再显示模式空间中的内容(默认显示)
-i : 直接修改原文件
-e : 同时执行多个匹配操作
-f :FILE 将多个AddressCommand保存至文件中,每行一个AddressComma

[root@centos7-2 ~]# sed -e '/^#/d' -e '/^$/d' /etc/fstab
//找出 fstab文件, 开关是#(注释行)与空行。

[root@centos7-2 ~]# cat /tmp/file.txt

/^#/d

/^$/d

[root@centos7-2 ~]# sed -f /tmp/file.txt /etc/fstab

//找出 fstab文件, 开关是#(注释行)与空行。

-r:表示使用扩展正则表达式

[root@centos7-2 ~]# sed -r 's|l(..e)|L1|' /tmp/1.txt

--follow-symlinks 修改软链接文件时

[root@centos7-2 ~]# sed --follow-symlinks -i 's|hello|hi|' /tmp/2.txt

sed命令 Address表示方法:

1、StartLine,EndLine

1,100 \前100行

1,$ \全文

3,10 \3到10行

2、LineNumber

3 \第3行

3、StartLine,+n

5,+2 \从第五行开始起,后2行。 5行6行

/root/,+2 \匹配root的那行与后一行。

4、/正则表达式/

/root/

/bash$/

5、 /正则表达式1/, /正则表达式2/

第1次被Regex1匹配的行开始,到第1次被Regex2匹配的行中间的所有行

sed命令 Command:

d 删除符合条件的行

# sed '1,2d' /etc/inittab

删除文件中包含oot的行

# sed '/oot/d' /etc/fstab

删除第1行及其后2行

# sed '1,+2d' /etc/fstab

删除第1行

# sed '1d' /etc/fstab

删除以/开头的行

# sed '/^//d' /etc/fstab

p 显示符合条件的行

显示以/开头的行

# sed -n '/^//p' /etc/fstab

a string 在符合条件的行后追加新行,string为追加的内容

在以/开头的行后面追加# hello world

# sed '/^//a # hello world' /etc/fstab

在以/开头的行后面追加两行内容,分别为# hello worl # hello linux

# sed '/^//a # hello world # hello linux' /etc/fstab

i string 在符合条件的行前添加新行,string为追加的内容

在文件第1行添加# hello world

# sed '1i # hello world' /etc/fstab

c string 替换指定行的内容

将文件中最后一行内容替换为End Of File

# sed '$c End Of File' /1.txt

# sed '7c SELINUX=disabled' /etc/sysconfig/selinux

= 用于显示每一行的行号

显示/etc/passwd文件最后一行的行号

# sed -n '$=' /etc/passwd

49

r file_name 将指定文件的内容添加到符合条件的行的后面

在文件的第2行后追加/etc/issue文件的内容

# sed '2r /etc/issue' /etc/fstab

w file_name 将符合条件的内容另存到指定文件中

将以UUID开头的行另存为到/1.txt中

# sed '/^UUID/w /1.txt' /etc/fstab

s/regex/string/[修饰符] 查找并替换 默认,只替换每一行第1次出现的字符

修饰符:g:替换每一行所有的字符

i:忽略大小写

简单案例
cuttest.sh
name age height
wang 18 68
li 33 78
he 22 67
zhao 27 58

sed -n '2,3p' cuttest.sh
返回:第二三行
wang 18 68
li 33 78

df -h | sed -n '2p'>sedtest.txt 将磁盘使用情况的第二行重定向到settest.txt

原文链接 https://blog.51cto.com/14154700/2401082
原文链接 https://blog.csdn.net/shudaqi2010/article/details/76613421

如侵权请联删

原文地址:https://www.cnblogs.com/kogmaw/p/12410361.html