Sed使用

sed有两种模式

sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
GAMS

参数

-e:它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项

-f:后跟保存了sed指令的文件

-i:直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改 .i.bak 修改并备份源文件

-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
-r  支持使用扩展正则
使用基本元字符集 ^, $, ., *, [], [^], \< \>,\(\),\{\}
使用扩展元字符集 ?, +, { }, |, ( )使用扩展元字符的方式:
DIFF

编辑命令参数

a:追加  向匹配行后面插入内容

c:更改  更改匹配行的内容

i:插入  向匹配行前插入内容

d:删除  删除匹配的内容

s:替换  替换掉匹配的内容

p:打印  打印出匹配的内容,通常与-n选项和用
AVRASM

案例

打印
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键

STYLUS

Sed使用
http://www.jcwit.com/article/288/
作者
Carlos
发布于
2023年11月14日
许可协议