sed命令主要是以行为单位对数据进行处理,可以进行替换、删除、新增、选取等操作

sed命令行格式:

         sed [options] 'command' filename

 options常用选项[-nefri]:

        -n∶取消默认输出;sed默认会输出所有文本内容,使用-n参数后只显示command处理过的行

        -e∶多点编辑,允许多个脚本指令被执行。

        -r∶支持扩展正则+ ? () {} |

        -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;

        -i∶直接修改读取的文本内容,而不会再显示输出。 

command命令选项:

command

说明

示例

p

打印匹配行

sed -n '2p' filename  打印文本第一行内容;不加-n,则会先输出文本全部内容,再打印第二行内容

=

显示文件行号

 

a

在定位行号后插入新文本信息(单独作为一行插入)

 

i

在定位行号前插入新文本信息(单独作为一行插入)

 

d

删除定位行 

 

s

使用替换模式替换相应模式

 

{}

在定位行执行的命令组

 

c

用新文本替换定位文本

 

n

读取下一行,遇到n时会自动跳入下一行

 

 

sed替换的基本语法为:

sed  's/原字符串/替换字符串/' 

但是这只会替换每行匹配到的第一个关键字;如需替换匹配到的所有关键字,可以在末尾加g来操作:

sed  's/原字符串/替换字符串/g' //替换所有匹配关键字

若需将替换操作写入文本,需添加-i选项,如 sed -i 's/原字符串/替换字符串/g' 

命令中s表示替换,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的,这时候只要把命令中的单引号改为双引号就行了,例如:

sed "s/原字符串包含'/替换字符串包含'/" //要处理的字符包含单引号

命令中的三根斜线分隔符可以换成别的符号,这在要替换的内容有较多斜线是较为方便,只需要紧跟s定义即可,例如换成问号”?”:

sed 's?原字符串?替换字符串?' //自定义分隔符为问号

 

sed中正则表达式的应用:

eg:

sed -n  '/^[0-9]/p' filename  表示打印文件中以任意数字开头的行     

command中也可使用正则表达式进行匹配:

元字符

 功能

 示例

^

行首定位符

 /^my/  匹配所有以my开头的行

$

行尾定位符

 /my$/  匹配所有以my结尾的行

.

匹配除换行符以外的单个字符

 /m..y/  匹配包含字母m,后跟两个任意字符,再跟字母y的行

*

匹配零个或多个前导字符

 /my*/  匹配包含字母m,后跟零个或多个y字母的行

[]

匹配指定字符组内的任一字符

 /[Mm]y/  匹配包含My或my的行

[^]

匹配不在指定字符组内的任一字符

 /[^Mm]y/  匹配包含y,但y之前的那个字符不是M或m的行

 

保存已匹配的字符

 1,20s/self/\1r/  标记元字符之间的模式,并将其保存为标签1,之后可以使用\1来引用它。最多可以定义9个标签,从左边开始编号,最左边的是第一个。此例中,对第1到第20行进行处理,you被保存为标签1,如果发现youself,则替换为your。

&

保存查找串以便在替换串中引用

 s/my/**&**/  符号&代表查找串。my将被替换为**my**

\<

词首定位符

 /\<my/  匹配包含以my开头的单词的行

\>

词尾定位符

 /my\>/  匹配包含以my结尾的单词的行

x\{m\}

连续m个x

 /9\{5\}/ 匹配包含连续5个9的行

x\{m,\}

至少m个x

 /9\{5,\}/  匹配包含至少连续5个9的行

x\{m,n\}

至少m个,但不超过n个x

 /9\{5,7\}/  匹配包含连续5到7个9的行