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
1.4.2 -i 修改文件内容
# 替换全局a字符为A字符
sed -i "s/a/A/g" a.txt
# 替换后保留源文件
sed -i.bak "s/a/A/gp" a.txt
1.4.3 -r 支持扩展表达式
扩展表达式主要用于**() \n**,匹配第n个括号的内容
# 将bbbb替换为BbbB
sed -r "s/b(bb)b/B\1B/g" a.txt
1.4.4 -e 允许多次编辑
# sed -e "s/red/green/;s/cat/dog/" test.txt