1.1 sed 命令介绍

sed是一种流编辑器,它是文本处理中非常好的工具,能够完美的配合正则表达式使用

处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space);接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕;接着处理下一行,这样不断重复,直到文件末尾。

处理时文件内容并没有改变,除非你使用重定向存储输出或者 -i 参数

sed主要用来自动编辑一个或多个文件,可以将数据行进行替换、删除、新增、选取等特定工作,简化对文件的反复操作,编写转换程序等。

1.2 sed 常用参数

参数 作用
-n 取消命令的默认输出
-i 直接修改文件内容,而不是输出到终端
-r 支持扩展表达式
-e 允许多次编辑

1.3 sed 内置命令字符

字符 作用
s 替换
g 全局(global)
p 打印(print)
d 删除(delete)
a 追加(append)
i 插入(insert)
= 显示行号

1.4 sed 使用实例

直接使用sed命令

# 替换单个字符
sed "s/root/oldboyedu/" /etc/passwd

# 替换全局字符
sed "s/root/oldboyedu/g" /etc/passwd

# 删除第一行
sed "1d" /etc/passwd

# 删除1-3行
sed "1,3d" /etc/passwd

# 在第每一行的下方追加新一行
sed "a/oldboy/" /etc/passwd

# 在第每一行的上方插入新一行
sed "i/oldboy/" /etc/passwd

# 显示行号
sed "=" /etc/passwd

1.4.1 -n 取消命令的默认输出

# 不显示输出
sed -n "s/root/oldboy/" /etc/passwd

# 显示输出
sed -n "s/root/oldboy/p" /etc/passwd

image20220516212928972.png

1.4.2 -i 修改文件内容

# 替换全局a字符为A字符
sed -i "s/a/A/g" a.txt

# 替换后保留源文件
sed -i.bak "s/a/A/gp" a.txt

image20220516214454797.png

1.4.3 -r 支持扩展表达式

扩展表达式主要用于() \n,匹配第n个括号的内容

# 将bbbb替换为BbbB
sed -r "s/b(bb)b/B\1B/g" a.txt

image20220516215010598.png

1.4.4 -e 允许多次编辑

# sed -e "s/red/green/;s/cat/dog/" test.txt

image20220517084914280.png