时间久了,有点忘记了,呵呵呵,备注一下
sed -i i——>所在行的上一行,追加行
sed -i a——>所在行的下一行,追加行
sed -i c——>行标,整行替换
sed -i &——>连接符,在本行指定字符串追加或插入
一、在匹配行前后插入内容
#匹配行前加
sed -i '/《匹配字段》/i 《插入内容》' 《文件名》
#匹配行后加
sed -i '/《匹配字段》/a 《插入内容》' 《文件名》
例:firewall文件加入禁止访问IP
sed -i "/<\/zone>/i <rule family="ipv4"> <source address="$IP"/> <reject/> </rule>" /etc/firewalld/zones/public.xml
二,在具体行号前后增加内容
#在指定行前插入内容
sed -i '《行号》 i 《插入内容》' 《文件名》
#在指定行后加入一行内容
sed -i '《行号》 a 《插入内容》' 《文件名》
注:sed中$符代表最后
例:对test.txt文件第一行进行操作
#test.txt内容
[root@ffing_cn ~]# cat test.txt
1111
2222
3333
4444
### i——>所在行的上一行,追加行
#i,在第一行前,添加一行内容aaa
[root@ffing_cn ~]# sed '1 i aaa' test.txt
aaa
1111
2222
3333
4444
#在第一行前,添加两行内容:aaa第一行、bbb第二行(\n回车换行)
[root@ffing_cn ~]# sed '1i aaa\nbbb' test.txt
aaa
bbb
1111
2222
3333
4444
### a——>所在行的下一行,追加行
#在第一行之后,添加aaa
[root@ffing_cn ~]# sed '1a aaa' test.txt
1111
aaa
2222
3333
4444
#在第一行之后,添加两行(\n回车换行)
[root@ffing_cn ~]# sed '1a aaa\nbbb' test.txt
1111
aaa
bbb
2222
3333
4444
###c——>行标,整行替换
#将第一行内容替换,使用c参数
[root@ffing_cn ~]# sed '1c aaa' test.txt
aaa
2222
3333
4444
###&——>连接符,活学活用,可以在指定字符串前后追加,或行尾追加
#以数字“2”开头行,保留原有内容,追加字符串“ffing”
#简单讲就是使用's///'进行替换,在替换时&连接符,连接的加是前面部分!(就如同excel中的&效果一样)
#连接效果
#在2开头行,行尾连接字符串ffing
#注意.*是通配符,用来匹配2后面点任意内容,如果省略则时插入效果
[root@ffing_cn ~]# sed 's/^2.*/&ffing/' test.txt
1111
2222ffing
3333
4444
##在2开头行,行首添加字符串ffing
[root@ffing_cn ~]# sed 's/^2.*/ffing&/' test.txt
1111
ffing2222
3333
4444
#插入效果
#在3后插入
[root@ffing_cn ~]# echo 123456 |sed 's/3/&ffing/'
123ffing456
#在3前插入
[root@ffing_cn ~]# sed 's/^2.*/ffing&/' test.txt
1111
ffing2222
3333
4444
例:在最后一行前后添加内容(最后一行使用$符表示)
#test.txt内容
[root@ffing_cn ~]# cat test.txt
1111
2222
3333
4444
#在最后一行前,增加一行xxx
[root@ffing_cn ~]# sed '$ i xxx' test.txt
1111
2222
3333
xxx
4444
#在最后一行前,增加两行($后跟空格,避免变量)
[root@ffing_cn ~]# sed '$ i xxx\nyyy' test.txt
1111
2222
3333
xxx
yyy
4444
#在最后一行之后,增加两行($后跟空格,避免变量)
[root@ffing_cn ~]# sed '$ a xxx\nyyy' test.txt
1111
2222
3333
4444
xxx
yyy
拓展:
获取指定行
[root@ffing_cn ~]# cat test.txt
1111
2222
3333
4444
#####获取最后一行
#sed
[root@ffing_cn ~]# sed -n '$'p test.txt
4444
#awk
[root@ffing_cn ~]# awk 'END{print}' test.txt
4444
#####获取指定行(第三行为例)
#sed
[root@ffing_cn ~]# sed -n 3p test.txt
3333
#awk(NR行标,==比较符)
[root@ffing_cn ~]# awk 'NR==3' test.txt
3333
发表评论