[实践OK]sed在查找到的某行下面添加一行的方法,文件行首添加几行:如何把一行文字添加的一个文件的头部,通过sed添加到/etc/hosts文件的第一行。
问题0:
sed 在/etc/hosts文件的第一行添加两行:
sed '1i\nameserver 10.70.63.150\nnameserver 202.106.0.20' /etc/resolv.conf > /tmp/resolv.conf.tmp && cat /tmp/resolv.conf.tmp > /etc/resolv.conf
问题一:
sed在查找到的某行下面添加一行的方法
在文件nginx.conf下面加上一行新的vhost虚拟主机:
直接在某行进行sed替换:
cat -n nginx.conf
发现是92行:
92 include vhost/mini.conf;
93 }
于是:
结果是在92行的下面插入了一行:
include vhost/mini.conf;
include vhost/api.xiyou102.jackxiang.com.conf;
}
想真替换在sed -i ,加上-i即可。
上面的实践来自:
原文件:
[root@xiaowu shell]# cat -n file
1 aaaa
2 bbbb
3 cccc
4 dddd
现在要在第二行即“bbbb”行的下面添加一行,内容为“xiaowu”
[root@xiaowu shell]# sed '/bbbb/a\xiaowu' file
aaaa
bbbb
xiaowu
cccc
dddd
如果要加两行“xiaowu”可以用一下语句,注意用“\n”换行
[root@xiaowu shell]# sed '/bbbb/a\xiaowu\nxiaowu' file
aaaa
bbbb
xiaowu
xiaowu
cccc
dddd
如果要在第二行即“bbbb”行的上添加一行,内容为“xiaowu”,可以把参数“a”换成“i”
[root@xiaowu shell]# sed '/b/i\xiaowu' file
aaaa
xiaowu
bbbb
cccc
dddd
以上文件中只有一行匹配,如果文件中有两行或者多行匹配,结果有是如何呢?
[root@xiaowu shell]# cat -n file
1 aaaa
2 bbbb
3 cccc
4 bbbb
5 dddd
[root@xiaowu shell]# sed '/bbbb/a\xiaowu' file
aaaa
bbbb
xiaowu
cccc
bbbb
xiaowu
dddd
由结果可知,每个匹配行的下一行都会被添加“xiaowu”
那么如果指向在第二个“bbbb”的下一行添加内容“xiaowu”,该如何操作呢?
可以考虑先获取第二个“bbbb”行的行号,然后根据行号在此行的下一行添加“xiaowu”
获取第二个“bbbb”行的行号的方法:
方法一:
[root@xiaowu shell]# cat -n file |grep b |awk '{print $1}'|sed -n "2"p
4
方法二:
[root@xiaowu shell]# sed -n '/bbbb/=' file |sed -n "2"p
4
由结果可知第二个“bbbb”行的行号为4,然后再在第四行的前或后添加相应的内容:
[root@xiaowu shell]# sed -e '4a\xiaowu' file
aaaa
bbbb
cccc
bbbb
xiaowu
dddd
[root@xiaowu shell]# sed -e '4a\xiaowu\nxiaowu' file
aaaa
bbbb
cccc
bbbb
xiaowu
xiaowu
dddd
向指定行的末尾添加指定内容,比如在“ccccc”行的行尾介绍“ eeeee”
[root@xiaowu shell]# cat file
aaaaa
bbbbb
ccccc
ddddd
[root@xiaowu shell]# sed 's/cc.*/& eeeee/g' file
aaaaa
bbbbb
ccccc eeeee
ddddd
=======================================================================
问题二:
文件行首添加几行:如何把一行文字添加的一个文件的头部,通过sed添加到第一行
我认为最好的方法:
如在sql前面加入一行:set names utf8,其见如下:
sed 在/etc/hosts文件的第一行添加两行:
sed '1i\nameserver 10.70.63.150\nnameserver 202.106.0.20' /etc/resolv.conf > /tmp/resolv.conf.tmp && cat /tmp/resolv.conf.tmp > /etc/resolv.conf
问题一:
sed在查找到的某行下面添加一行的方法
在文件nginx.conf下面加上一行新的vhost虚拟主机:
cat hosts | sed -e'1ihello world!' > afteradd.txt
直接在某行进行sed替换:
cat -n nginx.conf
发现是92行:
92 include vhost/mini.conf;
93 }
于是:
结果是在92行的下面插入了一行:
include vhost/mini.conf;
include vhost/api.xiyou102.jackxiang.com.conf;
}
想真替换在sed -i ,加上-i即可。
上面的实践来自:
原文件:
[root@xiaowu shell]# cat -n file
1 aaaa
2 bbbb
3 cccc
4 dddd
现在要在第二行即“bbbb”行的下面添加一行,内容为“xiaowu”
[root@xiaowu shell]# sed '/bbbb/a\xiaowu' file
aaaa
bbbb
xiaowu
cccc
dddd
如果要加两行“xiaowu”可以用一下语句,注意用“\n”换行
[root@xiaowu shell]# sed '/bbbb/a\xiaowu\nxiaowu' file
aaaa
bbbb
xiaowu
xiaowu
cccc
dddd
如果要在第二行即“bbbb”行的上添加一行,内容为“xiaowu”,可以把参数“a”换成“i”
[root@xiaowu shell]# sed '/b/i\xiaowu' file
aaaa
xiaowu
bbbb
cccc
dddd
以上文件中只有一行匹配,如果文件中有两行或者多行匹配,结果有是如何呢?
[root@xiaowu shell]# cat -n file
1 aaaa
2 bbbb
3 cccc
4 bbbb
5 dddd
[root@xiaowu shell]# sed '/bbbb/a\xiaowu' file
aaaa
bbbb
xiaowu
cccc
bbbb
xiaowu
dddd
由结果可知,每个匹配行的下一行都会被添加“xiaowu”
那么如果指向在第二个“bbbb”的下一行添加内容“xiaowu”,该如何操作呢?
可以考虑先获取第二个“bbbb”行的行号,然后根据行号在此行的下一行添加“xiaowu”
获取第二个“bbbb”行的行号的方法:
方法一:
[root@xiaowu shell]# cat -n file |grep b |awk '{print $1}'|sed -n "2"p
4
方法二:
[root@xiaowu shell]# sed -n '/bbbb/=' file |sed -n "2"p
4
由结果可知第二个“bbbb”行的行号为4,然后再在第四行的前或后添加相应的内容:
[root@xiaowu shell]# sed -e '4a\xiaowu' file
aaaa
bbbb
cccc
bbbb
xiaowu
dddd
[root@xiaowu shell]# sed -e '4a\xiaowu\nxiaowu' file
aaaa
bbbb
cccc
bbbb
xiaowu
xiaowu
dddd
向指定行的末尾添加指定内容,比如在“ccccc”行的行尾介绍“ eeeee”
[root@xiaowu shell]# cat file
aaaaa
bbbbb
ccccc
ddddd
[root@xiaowu shell]# sed 's/cc.*/& eeeee/g' file
aaaaa
bbbbb
ccccc eeeee
ddddd
=======================================================================
问题二:
文件行首添加几行:如何把一行文字添加的一个文件的头部,通过sed添加到第一行
我认为最好的方法:
cat - file <<< 123
cat - hosts <<< 123 > out.txt
如在sql前面加入一行:set names utf8,其见如下:
[/home/jackxiang/sed]# vi append.txt
sql
sql2
sql3
sql
sql2
sql3
cat - append.txt <<< "set names utf8"
[/home/jackxiang/sed]# cat - append.txt <<< "set names utf8" > addfirstline.txt
[/home/jackxiang/sed]#
vi addfirstline.txt
set names utf8
sql
sql2
sql3
vi addfirstline.txt
set names utf8
sql
sql2
sql3
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/3536/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2019-6-6 20:36
评论列表