文本处理三剑客-sed指令用法详解
1. sed的作用
sed(stream editor)sed 会根据脚本命令来处理文本文件中的数据,这些命令要么从命令行中输入,要么存储在一个文本文件中,此命令执行数据的顺序如下:
每次仅读取一行内容;
根据提供的规则命令匹配并修改数据。注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据;
将执行结果输出。
当一行数据匹配完成后,它会继续读取下一行数据,并重复这个过程,直到将文件中所有数据处理完毕。
sed语法
1> sed命令行格式语法:
sed [option] 'command(s)' files
2> sed脚本文件语法:
sed [-n] -f scriptfile files
sed常用选项:
命 令 说 明
a\ 在当前行后添加一行或多行
c\ 用新文本修改(替换)当前行中的文本
d 删除行
i\ 在当前行之前插入文本
h 把模式空间里的内容复制到暂存缓存区
H 把模式空间里的内容追加到暂存缓存区
g 取出暂存缓冲区里的内容,将其复制到模式空间,覆盖该处原有内容
G 取出暂存缓冲区里的内容,将其复制到模式空间,追加在原有内容后面
l 列出非打印字符
p 打印行
n 读入下一输入行,并从下一条命令而不是第一条命令开始处理
q 结束或退出 sed
r 从文件中读取输入行
! 对所选行意外的所有行应用命令
s 用一个字符串替换另一个
替换标志:
g 在行内进行全局替换
p 打印行
w 将行写入文件
x 交换暂存缓冲区与模式空间的内容
y 将字符转换为另一字符(不能对正则表达式使用 y 命令)
简单示例:
替换文本:
sed 's/old_text/new_text/' filename
将文件中的old_text替换为new_text
全局替换文本:
sed 's/old_text/new_text/g' filename
将文件中所有的old_text替换为new_text
仅打印包含特定模式的行:
sed -n '/pattern/p' filename
sed -n ‘/pattern/p’ filename
删除特定模式的行:
sed '/pattern/d' filename
删除包含pattern的行
插入文本:
sed '1i\inserted_text' filename
在文件的第一行之前插入inserted_text
在匹配模式后插入文本:
sed '/pattern/a\inserted_text' filename
在包含pattern的行之后插入inserted_text
在特定行范围内进行替换:
sed '2,5s/old_text/new_text/' filename
在第2行到第5行之间将old_text替换为new_text