1.特点及格式
sed - 用于过滤和转换文本的流编辑器
Sed 是一个流编辑器。 流编辑器用于对输入流(文件或来自管道的输入)进行基本的文本转换。 虽然在某些方面类似于允许脚本编辑的编辑器(如ed),但sed的工作方式是只对输入进行一次处理,因此效率更高。 但是,正是sed在管道中过滤文本的能力使它与其他类型的编辑器特别不同。
sed选项
-n, --quiet, --silent:抑制模式空间的自动打印
-e script, --expression=script:将脚本添加到要执行的命令中
-f script-file, --file=script-file:将脚本文件的内容添加到要执行的命令中。
--follow-symlinks:在原地处理时跟随符号链接
-i[SUFFIX], --in-place[=SUFFIX]:就地编辑文件(如果提供SUFFIX,则进行备份)
-c, --copy:在-i模式下洗刷文件时,使用拷贝而不是重命名。
-b, --binary:不做任何事情;为了与WIN32/CYGWIN/MSDOS/EMX兼容(以二进制模式打开文件(CR+LFs不被特别处理))。
-l N, --line-length=N:为 "l "命令指定所需的换行长度。
--posix:禁用所有GNU扩展。
-r, --regexp-extended:在脚本中使用扩展的正则表达式。
-s, --separate:将文件视为独立的,而不是单一的连续长流。
-u, --unbuffered:从输入文件中加载最少的数据,并更频繁地刷新输出缓冲区。
-z, --null-data:用NUL字符分隔行
# 如果没有给出-e、--expression、-f或--file选项,那么第一个非选项参数将被当作要解释的sed脚本。 所有其余的参数都是输入文件的名称;如果没有指定输入文件,那么就读取标准输入。
# GNU sed主页:<http://www.gnu.org/software/sed/>。 使用GNU软件的一般帮助。<http://www.gnu.org/gethelp/>。 电子邮件错误报告到。<bug-sed@gnu.org>。 请务必在 "Subject: "字段中加入 `sed''在 "Subject: "字段中。
sed命令
b lable: 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
-a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
-c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
-d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
-i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
-p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
-s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法
c:把选定的行改为新的文本。
sed '3c aaaa' a.txt # 将a.txt中第三行改成aaa
d :删除,删除选择的行。
D :删除模板块的第一行。
h H:(h)拷贝/(H)追加模板块的内容到内存中的缓冲区。
g G:拷贝/追加到模式空间
l :将当前行以 "视觉上无歧义 "的形式列出。
n N:读取/添加下一行输入到模式空间。
p:打印模板块的行,一般用于查找。
‘1p’ '2p':指定行号查找
'1,5p':指定行号范围
'/lidao/p':类似于grep过滤, //之间可以写正则
P:(大写) 打印模板块的第一行。
s/regexp/replacement/ : 尝试与模式空间中的regexp匹配。 如果成功,用替换来替换所匹配的部分。 替换可以包含特殊字符"&",指的是匹配的部分,以及特殊转义\1到\9,指的是regexp中相应的匹配子表达式。
sed格式
命令 选项 (s)sed命令功能(g)修饰符 参数(文件)
sed -r 's#oldvalue#newvalue#g' text.txt
2.sed核心应用
# 先匹配,再引用
sed 's#(.*)#\1#'