sed : 是一种几乎包括所有UNIX平台的轻量级流编辑器(stream edit)。主要用来将数据进行选取,替换,删除,新增的命令。支持管道符操作
1. 命令详情
- sed [选项] '[动作]' 文件名
- 选项:
-n : 不显示原来的行到屏幕,只显示增加的行
-e : 允许对输入数据应用多条sed命令编辑
-i : 用sed修改结果,直接修改读取数据的文件,而不是由屏幕输出 - 动作:
a\ : 追加,在当前行后添加一行或多行,添加多行时,除最后一行外,每行末尾需要用“\”代表数据未完结。(append)
c\ : 行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需要用“\”代表数据未完结。
i\ : 插入,在当前行前添加一行或多行,插入多行时,除最后一行外,每行末尾需要用“\”代表数据未完结。(insert)
d : 删除,删除指定行(delete)
p : 打印,输出指定行(print)
s : 字串替换,用一个字符串替换另外一个 字符串。格式为 “行范围s/旧字符串/新字符串/g”(和vim中的替换格式类似)。(substitute)
使用-e时多个命令间用;分割
1.1 字符替换s详解
1.1.1 简单用法
s命令默认情况下只替换每行中出现的第一处,要让替换命令对一行中不同位置出现的文本起作用,必须使用替换标记。替换标记会在替换命令字符串之后设置:
s/pattern/replacement/flags :'/'字符分隔符
1.1.2 四种可用替换标记
-
数字,表明新文本将替换第几处模式匹配的地方
-
g,表明新文本将替换所有已有文本的地方
-
p,表明打印行,通常和 -n一起使用,打印那些发生替换的行
-
w file,将替换的结果写到file文本中
当替换路径时需要替换的字符中出现‘/’,需要进行转义,看起来会比较乱,因此可以通过更换字符分隔符来解决这个问题。比如'/'替换为'!'。
1.1.3 替换特定行的字符串
- 使用行的数字范围
sed流编辑器会将文本流中的第一行分配为第一行,然后继续顺序为新航分配行号。
在命令指定行号时,可以是单个行号,或是使用起始行号、逗号以及结尾行号指定一定的范围内的行。$代表结尾。
-
用文本模式来过滤出某行,可使用正则表达式
1.2 删除行d
-
指定行号:使用类似s,可指定单个行号,或者一个范围,使用$代表结尾
-
匹配模式:同s
-
设置删除行起始模式,/pattern1/,/pattern/d,从pattern1开始删除,到pattern2结束,如果未找到pattern2则一直删除到结尾,如果出现多个pattern1,2则删除多次
1.3 指定行前后插入(i\,a\)
只能将文本插入或附加到单个行的前面或后面
-
直接插入到数据流前或附加到后面
- 将数据添加到数据流里面(寻址)
-
指定行
-
匹配模式
1.4 修改行(c\)
使用方式同i\,a
2 其他
打印行号:=
sed '=' data.txt
输出不可打印字符例如制表符\t : l
sed -n 'l' data.txt