Sed使用
sed有两种模式
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
参数
-e:它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项
-f:后跟保存了sed指令的文件
-i:直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改 .i.bak 修改并备份源文件
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
-r 支持使用扩展正则
使用基本元字符集 ^, $, ., *, [], [^], \< \>,\(\),\{\}
使用扩展元字符集 ?, +, { }, |, ( )使用扩展元字符的方式:
编辑命令参数
a:追加 向匹配行后面插入内容
c:更改 更改匹配行的内容
i:插入 向匹配行前插入内容
d:删除 删除匹配的内容
s:替换 替换掉匹配的内容
p:打印 打印出匹配的内容,通常与-n选项和用
案例
打印
sed -n '2p' 打印第二行
sed -n '1,3p' 打印1-3行
sed -n '$p' 最后一行
sed -n '/aaa/p' 打印含有aaa的行
sed -n '/\$/p' 打印含有$的行 特殊字符需用\转义
sed -n '$=' 打印总行数
插入
sed '/aaa/a\xxx' 在含有aaa行的下一行插入xxx
sed '/aaa/i\xxx' 在含有aaa行的上一行插入xxx
sed '5 a\123' 在第五行后插入123
删除
sed -i 's/[ ]*//g' 删除空格
sed -i '/^$/d' 删除空行
sed -i '1d' 删除第一行
sed -i '1,2d' 删除1-2行
sed -i '$d' 删除最后一行
sed -i '^aaa/d' 删除以aaa开头的行
sed -i 'aaa/d' 删除包含aaa的行
sed -i ‘/^[[:space:]]*$/d’ 删除以空格和tab开头的空行
替换
sed -i 's/a/b/' 替换第一个a为b
sed -i 's/a/b/g' 替换所有的a为b
sed -i 's/aaa/&111/' 将aaa替换成aaa111 &也可放在后面替换为111aaa
sed -i '/test/s/a/b/' 找到包含test的行把a替换成b
sed -i "s#\(appversion=\"\).*\(\"\)#\1"1.15.1"\2#" 替换appversion=“任何”为appversion=“1.15.1”
sed -i "s#\(resversion=\"\)"1.1.1"\(\"\)#\1"1.1.2"\2#" 替换resversion=“1.1.1”为resversion=“1.1.2”
‘s/\ . $//g’ 删除以句点结尾行
‘-e/abcd/d’ 删除包含a b c d的行
‘s/[ ] [ ] [ ] */[ ]/g’ 删除一个以上空格,用一个空格代替
‘s/^ [ ] [ ] *//g’ 删除行首空格
‘s/\ . [ ] [ ] */[ ]/g’ 删除句点后跟两个或更多空格,代之以一个空格
‘/^ $/d’ 删除空行
‘s/^ .//g’ 删除第一个字符
‘s/COL \ ( . . . \ )//g’ 删除紧跟C O L的后三个字母
‘s/^ \///g’ 从路径中删除第一个\
‘s/[ ]/[TAB]//g’ 删除所有空格并用t a b键替代
‘S/^ [TAB]//g’ 删除行首所有t a b键
‘s/[TAB] *//g’ 删除所有t a b键
Sed使用
http://www.jcwit.com/article/288/