sed编辑器逐行处理文件(或输入)
(1).基本格式
sed [-nefri] [动作] [Input_File]
选项:
-n :表示安静模式操作,也就是只将被更改的行输出,没更改的行不输出,默认sed
是输出所有的行
-e Scrip:指定sed的执行命令可以指定多个这个选项
-f Script_File:指定执行一个包含sed命令的脚本文件
-r:支持扩展的正则表达式(默认只支持基础的正则表达式)
-i:直接操作原文件,默认是不更改原文件的,而只是将更改结果直接输出到
标准输出上,可以使用这个选项来让sed直接更改原文件
动作:
基本格式: [n1[,n2]] Function
说明:n1和n2用来指定修改的范围(从第n1行到第 n2行),他们不一定必须指定
若都没指定则表示修改整个文件,若没有指定n2则表示修改的范围为从n1
到文件末尾.
注:n1,n2可以为数字,表示第N行(从1开始),当然也可以用’/Pattern/’来指定
表示使用查找来指定函数,即查找到最先包含Pattern的行为该指定的行数
Function有以下值:
(1).插入
[1].i String:表示当前行前面插入一行,内容为String
[2].a String:表示当前行后面插入一行,内容为String
(2).删除
d:表示将指定的行删除
(3).替换
[1].c String:指定整行替换为String
[2].s/Find_String/Replace/:表示用Replace替换Find_String
(4).打印
p:表示将选择的行打印出来
下面是一些实例:
假设文件 example.txt的内容如下
#######################example.txt内容开始
line1 hello world1
line2 hello world2
line3 hello world3
#######################example.txt内容结束
(1).在第1行后面插入一行,内容为Insert after line1
sed -i -e ‘1a Insert after line1’ example.txt
结果example.txt内容为:
line1 hello world1
Insert after line1
line2 hello world2
line3 hello world3
(2).在第一行前面插入一行,内容为Insert before line1
sed -i -e ‘1i Insert before line1’ example.txt
结果:
Insert before line1
line1 hello world1
Insert after line1
line2 hello world2
line3 hello world3
(3).删除第2到第4行
sed -i -e ‘2,4d’ example.txt
结果:
Insert before line1
line3 hello world3
(4).打印第2行
sed -e ‘2p’ example.txt
(5).将第2行替换为line2 hello world
sed -i -e ‘2c line2 hello world’ example.txt
结果:
Insert before line1
line2 hello world
(6).替换第二行的hello world为world hello
sed -i -e ‘2s/hello world/world hello/’ example.txt
结果:
Insert before line1
line2 world hello
好了sed简单入门就讲到这里了,由于sed命令实在太好用了,也太强大了,因此要
熟练使用sed还必须参考完整的sed手册页或其他高手写的教材,本文只是一个简单
的入门教材而已
符号 原子性 含义
\0 是 匹配空字符(ASCII NUL)。
\NNN 是 匹配给出八进制的字符,最大值为\377。
\n 是 匹配前面第n个捕获字串(十进制)。
\a 是 匹配警钟字符(BEL)。
\A 否 如果在字串的开头为真
\b 是 匹配退各字符(BS)。
\b 否 在字边界为真
\B 否 不在字边界时为真
\cX 是 匹配控制字符 Control-x(\cZ,\c[,等)。
\C 是 匹配一个字节(C字符),甚至在utf8中也如此(危险)
\d 是 匹配任何数字字符
\D 是 匹配任何非数字字符
\e 是 匹配逃逸字符(ASCII ESC,不是反斜杠)。
\E —— 结束大小写(\L,\U)或者掩码(\Q)转换
\f 是 匹配进页字符(FF)。
\G 否 如果在前一个m//g的匹配结尾位置时为真
\l —— 只把下一个字符变成小写
\L —— 把\E以前的字母都变成小写
\n 是 匹配换行符字符(通常是NL,但是在Mac上是CR)。
\N{NAME} 是 匹配命名字符(\N{greek:Sigma})。
\p{PROP} 是 匹配任何有命名属性的字符
\P{PROP} 是 匹配任何没有命名属性的字符
\Q —— 引起(消元)直到\E前面的字符
\r 是 匹配返回字符(通常是CR,但是在Mac上是NL)。
\s 是 匹配任何空白字符。
\S 是 匹配任何非空白字符。
\t 是 匹配水平制表符(HT)。
\u —— 只把下一个字符变成标题首字符
\U —— 大写(不是标题首字符)\E 以前的字符。
\w 是 匹配任何“字”字符(字母数字加”_” )。
\W 是 匹配任何“非字”字符。
\x{abcd} 是 匹配在十六进制中给出的字符。
\X 是 匹配Unicode里的”组合字符序列“字串。
\z 否 只有在字串结尾时为真
\Z 否 在字串结尾或者在可选的换行符之前为真。
其他示例:
首行字符小写:
sed -i ‘1s/.*/\L&/g’ tbl_user_profile_status.csv