在指定行前后插入一行
1 2 3 4 5 6 7 8
| sed -i '$行数i 字符串' 文件 -i 直接修改文件(如果指定扩展名就备份文件)
**在第一行前插入文本** sed -i '1i ttt' a.txt
**在第一行后插入文本** sed -i '1a ttt' a.txt
|
在指定的多行前后插入
1 2 3 4 5 6 7
| sed -i '$行数,$行数i 字符串' 文件
在指定的多行前面插入 sed -i 'n,mi ttt' a.txt
在指定的多行后面插入 sed -i 'n,ma ttt' a.txt
|
删除指定行
1 2 3 4
| sed -i 2d a.txt
删除模板的第一行 sed -i D a.txt
|
替换
1 2 3 4 5 6 7 8
| 把文件filename中的a字符换成A字符 sed -i "s/a/A/g" filename
批量替换 替换dir文件夹下所有文件中的a字符变成A字符 sed -i "s/a/A/g" `grep a -rl dir/`
替换为空格 将tab替换为空格 sed -i "s/\t/ /g" filename
|
查找
1
| sed -n '/^PermitRootLogin yes/'p /etc/ssh/sshd_config
|
删除
1
| sed -i '/PermitRootLogin yes/d' /etc/ssh/sshd_config
|
查找某个字符然后替换其他
1
| sed -i '/sshd:all/s/sshd/#sshd/g' /etc/hosts.deny
|
查找某行容纳后替换该行的字符
1
| sed -i ''$lostlinenum's/$/ 数据丢失/' /tmp/purebd
|
M-BM- 字符问题
查找文件中某一行内容
1 2 3 4 5
| 查找文件text中第三行的内容 sed -n '3p' text
查找文件text中第二行到第四行的内容 命令: sed -n '2,4p' text
|
提取文本最后一行
1 2 3
| sed -n '$p'
sed '$!N;$!D'
|
sed -i默认不检查软链接!!!
sed的-i / –in-place参数可以直接修改文件。但是,默认情况下,sed在读取文件之前不会检查文件是否是软链接,所以sed转换之后覆盖原文件(sed相当于将原文件通过流方式过滤改成,然后通过管道生成临时文件,然后删除掉原文件,再将临时文件重命名成原文件)。这就导致了如果原文件是一个软链接,就会在修改后转变成实体文件。
GNU sed 提供了一个–follow-symlinks参数,可以检测修改的是软链接,而实现对软链接指向的实体文件的修改,避免破坏软链接。案例如下:
1
| sed -i --follow-symlinks 's/cat/dog/' /etc/rc.local
|
参考:如何避免sed -i破坏文件的软链接