参数
-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支持多个,\b大家应该知道是锚定的意思,说白了就是边界符,那么这就只会匹配第一个开头的字母,然后\U的意思在元字符里的解释是“大写(不是标题首字符)\E 以前的字符”,而\u只是将下一个字符变为大写,注意它们的区别噢。
删除
#注意,d命令是在后面的,s命令在前面
- sed 1,5d file # 删除1-5行
- sed ‘/pattern/d‘ # 删除匹配的行
#删除操作的匹配模式跟替换一样
- sed ‘s/[0-9]//g‘ 1.txt #删除所有数字
- sed ‘s/[^0-9]//g‘ 1.txt #删除所有非数字
插入
#在行后插入
- 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/‘
- 调换两个字符串位置:
- head -n2 1.txt|sed -r ‘s/(root)(.*)(bash)/\3\2\1/‘
#在sed中可以用()去表示一个整体,123分别表示一个括号内容
- 打印文件中特定的某行到某行之间的内容
sed -n ‘/起始内容/,/终止内容/p‘ filename
- 把一个文件多行连接成一行
cat filename|xargs|sed ‘s/ /+/g‘
- 在文件中某一行最后添加一个数字
sed ‘s/(^a.)/\1 12/‘ test
或者sed ‘s/./& 12/‘ test
- 使用sed打印1到100行包含某个字符串的行
sed -n ‘1,100{/abc/p}‘ 1.txt
- 转换大小写字母
#sed中使用\u表示大写,\l表示小写
sed ‘s/\b[a-z]/\u&/g‘ filename #每个单词的第一个小写字母变大写
sed ‘s/[a-z]/\u&/g‘ filename #大写替换小写
sed ‘s/[A-Z]/\l&/g‘ filename #大写变成小写
- vim+sed删除行首数字和空字符
在vim下输入:%s/^[0-9][0-9]// 删除行首数字
sed -i ‘s/^ //g‘ filename #删除行首所有空字符
练手脚本.note
- grep -v ^# filename|sed /^[[:space:]]*$/d|sed /^$/d #删除文本中的空行、以空格组成的行及#注释的行
- sed -i ‘20,30s/^/#/‘ filename #给20到30行开头加上#号
sed用法
原文:http://blog.51cto.com/10941098/2136347