sed在处理文本时是逐行读取文件内容,读到匹配的行就根据指令做操作,不匹配就跳过。
sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑。详细用法参考:shell脚本--sed的用法
sed '55d' test # 将test文件的第55行删除后的文件内容打印在控制台上,文件本身没有被修改 sed -i '55d' test # 将test文件的第55行删除,文件本身被修改了
使用 -i 参数可能会遇到一个 "sed: 1: "xxx": invalid command code ."的问题,参考解释和解决方案:
i 本来的意思就原地替换的意思, 为啥不能替换呢? 一般情况 原地替换是比较危险的行为, 为了规避这样的行为, 需要你提供一个 备份的扩展名, 才能进行替换. 如果你给了空的扩展,就不会备份源文件. 但这不是推荐的方式. 因为 你面临这损坏或者部分损坏的危险 有可能恰巧是当磁盘空间用完的时候.
来加上扩展名 来试验一下
sed -i ".bak" '5d' test
此时 就会发现 一个备份文件
├── test
├── test.bak
如果不想备份的话, 可以不提供扩展名称. 加上一个空串即可.
sed -i "" '5d' test