Linux命令之sed

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

语法格式:

sed [option] 'command' file_name 
sed [options] -f scriptfile file(s)
选项 说明
-e 多点编辑,可以执行多个子命令
-f 可以从脚本中读取命令
-i 直接编辑源文件
-r 在命令中使用扩展表达式
-n 只有经过特殊处理的行才会被输出

命令前通常跟的是行的选择规则,如行号选择、关键字匹配等。

命令 说明
a:\ 追加字符串,在选中的行后追加a命令后跟着的字符串为一行
c:\ 替换行,使用c命令后的字符串替换选中的行
d 删除,删除选中的行
i:\ 插入字符串,在选中行之前插入i命令后跟着的字符串为一行
p:\ print打印,打印当前选择的行到屏幕
s:\ 替换字符串,用法:1,2s/old_str/new_str/g,g指定全面替换,也即替换行内所有匹配的值
w:\ 写入文件,将匹配的行写入文件

s替换命令格式:sed '位置参数 s/pattern/replaced/[flag]'
其中flag选项用来影响替换规则:

选项 说明
g 全局替换
n 替换行内匹配的第n个字符串
p 替换第一个匹配的字符串,并且将缓冲区输出到标准输出
w 替换第一个匹配的字符串,并且将改动的行输出到磁盘文件中
省缺 替换文本行第一个匹配字符串

命令示例

sed '1,3p' a.txt  #输出文件1-3行
sed '1~3p' a.txt #从第一行开始输出,步长为3
sed '1,$p'  a.txt #输出第一行到最后一行
sed -i "s/letitia/hello world/g" `grep "letitia" -rl test1.txt`
sed '/^$/d' file #删除空白行
sed -n -e '1,/^ma/ s/l/L/g' -e '1,$ p' test1.txt
sed -n '/test/w file' example #将包含test的行写入文件file

你可能感兴趣的:(Linux命令之sed)