本帖最后由 xiaoqing757 于 2016-3-8 10:18 编辑
参数
-i # 将修改保存到文件
-e # 在命令行运行多条sed命令
-n # 打印由p命令指定的行
-f # 指定sed命令脚本文件
-r #使用扩展正则表达式
替换标记,4种可用的替换标记
s/pattern/replacement/flags
数字,替换一行中第几次模式匹配的地方
g 替换一行中所有匹配的地方
p 打印匹配的行
w file ,将替换结果写到文件file中,只写匹配的内容
数字寻址,用数字来指定行
行地址:
替换删除
插入
显示行号,‘=’ 命令能显示行号,但是行号是单独的一行,若想行号后面跟该行的内容,需要再进行处理
参数
-i # 将修改保存到文件
-e # 在命令行运行多条sed命令
-n # 打印由p命令指定的行
-f # 指定sed命令脚本文件
-r #使用扩展正则表达式
替换标记,4种可用的替换标记
s/pattern/replacement/flags
数字,替换一行中第几次模式匹配的地方
g 替换一行中所有匹配的地方
p 打印匹配的行
w file ,将替换结果写到文件file中,只写匹配的内容
数字寻址,用数字来指定行
- # -i 参数的一个用法
- sed -i.bak 's/bin/sbin/g' /etc/passwd
- # 此命令会在修改文件前备份,并以.bak为后缀
- sed -n '2,5p' /etc/passwd # 打印2-5行
- sed '1,10d' /etc/passwd # 删除1-10行
- # 最后一行可以用 $ 表示,例如3,$表示从第三行到最后一行
- # addr1,+N # 表示 从addr1到addr1+N行,例如2,8,表示2-10行
- # addr1,~N # 表示从addr1到N的倍数的行,例如5,~4 ,表示5-8行,因为8是大于5的4的整数倍的最小一个
- # first~step # 表示以first开始,后面每次加step,例如1~2,表示所有的奇数行,如下所示
替换
- sed -n 's/pattern/replace/' /etc/passwd # 替换首次匹配的pattern为replace
- sed -n 's/pattern/replace/g' /etc/passwd # 替换所有,g表示全局
- sed -n 's/pattern/&replace/g' file # 在pattern后增加
- sed -n 's/pattern/replace&/g' file # 在pattern前增加
- sed -n 's/pattern/\L&/g' file # 将pattern转换为大写
- sed -n 's/pattern/\U&/g' file # 将pattern转换为小写
- sed -n 's/[A-Z]/\l&/g' file # 将文件中的大写字母转换为小写,\l,\u只支持单个字符,\L,\U支持多个
- # 注意,d命令是在后面的,s命令在前面
- sed 1,5d file # 删除1-5行
- sed '/pattern/d' # 删除匹配的行
- # 删除操作的匹配模式跟替换一样
插入
- # 在行后插入
- sed 1,4G file # 在1-4行后面插入一行空行
- sed '/pattern/G' # 在匹配行后面插入一个空行
- sed G file # 在每一行后面插入一个空行
- sed 's/$/wq&/' file # 在行尾插入字符wq
- sed '/pattern/a\new line' file # 在匹配行后插入一行new line,匹配模式可以是正则表达式,也可以是行地址
- # 在行前插入
- sed 1,4'{x;p;x}' file # 在1-4行前插入一个空行,注意与G的不同
- sed N'{x;p;x}' # 在第N行前插入空行
- sed '/root/{x;p;x}' /etc/passwd # 在匹配行前插入空行
- sed '{x;p;x}' /etc/passwd # 在每一行前面插入空行
- sed '/pattern/i\new line' file # 在匹配行前插入一行new line
显示行号,‘=’ 命令能显示行号,但是行号是单独的一行,若想行号后面跟该行的内容,需要再进行处理
- sed '=' file | sed 'N;s/\n/\t/'
编辑回复