首页 > 其他 > 详细

sed练习2

时间:2019-12-03 01:46:22      阅读:85      评论:0      收藏:0      [点我收藏+]
[root@node2 ~]# cp /etc/passwd /server/scprits/
[root@node2 ~]# cd /server/scprits/
[root@node2 scprits]# ls -l passwd 
-rw-r--r--. 1 root root 1065 12月  2 20:49 passwd
[root@node2 scprits]# sed -n 3a \
user. passwd
user.
#第三行加入一行
[root@node2 scprits]# sed /root/a \
> root1 passwd
root:x:0:0:root:/root:/bin/bash
root1
#匹配模式root的行之后加一行root1
[root@node2 scprits]# sed -n $a \
liujunjun passwd
liujunjun
#最后一行加入一或多行。
[root@node2 scprits]# sed -n 3i \
liujunjun1 passwd
liujunjun1
#在第三行之前插入一行。
[root@node2 scprits]# sed -n /root/i \
> ljj passwd
ljj
ljj
#在匹配模式root之前插入一行或多行。
[root@node2 scprits]# sed -n $i \
> backup passwd
backup
#在最后一行之前插入一行。

更改文件中指定的行

[root@node2 scprits]# sed 1cadmin passwd 
admin
#修改文件的第一行内容为root。
[root@node2 scprits]# sed /sbin/cbin passwd 
#修改匹配指定的行。
[root@node2 scprits]# sed $cdebug passwd
#修改文件最后一行。

删除文件中的行

[root@node2 scprits]# sed 4d passwd     #删除文件中的第4行
[root@node2 scprits]# sed 4~2d passwd
#从文件中第4行开始删除,并且每隔2行删除一行。
[root@node2 scprits]# sed 2,5d passwd
#删除文件中第2行到第5行
[root@node2 scprits]# sed 2,5!d passwd 
#删除文件中除第2行到第5行之外的行。
[root@node2 scprits]# sed $d passwd 
#删除文件最后一行。
[root@node2 scprits]# sed -e $d passwd -e /root/d passwd
#删除匹配模式的行
[root@node2 scprits]# sed /root/,$d passwd 
#从匹配模式的行删除到文件最后一行。
[root@node2 scprits]# sed /root/,+1d passwd 
#删除文件中匹配模式指定模式的行及其后面的n行
[root@node2 scprits]# sed /^$/d passwd 
#删除文件中的空行。
[root@node2 scprits]# sed /root\|ftp/!d passwd 
#删除文件中不匹配指定模式的行。
[root@node2 scprits]# sed 1,4{/root/d} passwd
#删除文件的指定范围内的行中匹配指定模式的行。

替换文件中的内容

[root@node2 scprits]# sed s/root/admin/ passwd 
#替换一行中第一个匹配模式的字符串
[root@node2 scprits]# sed s/root/admin/g passwd
替换文件中的匹配指定模式的所有字符串。
[root@node2 scprits]# sed s/root/admin/2 passwd 
#替换文件中第行第2个匹配模式的字符串。
[root@node2 scprits]# sed s/root/admin/gpw /tmp/passwd passwd
#将发生字符串替换的行写入指定的文件,并只打印替换的行。
[root@node2 scprits]# sed /bin/s/\///g passwd 
#将文件passwd中匹配模式/bin/的行中的/之后的字符串清空(替换为空)
[root@node2 scprits]# sed s/..$//g passwd 
#删除掉字符串的个数由s/..$//g 中的圆点的个数决定,就是删除掉每行最后的2个字符。
[root@node2 scprits]# sed s/^..//g passwd
[root@node2 scprits]# sed 1,10s/^/#/g passwd 
#1-10行加#号
[root@node2 scprits]# sed s/^#//g passwd 
#去#号
[root@node2 scprits]# sed s/^#//;/^$/d passwd 
#删除文件中的注释及其空行。
[root@node2 scprits]# sed -i s/^/1\./ passwd
[root@node2 scprits]# sed s/^[0-9]\./(&)/ passwd
#给文件passwd每个行数字编码加一个小括号(),利用符号&.

打印文件中的行。

[root@node2 scprits]# sed -n 4p passwd   #打印文件中的第4行。
[root@node2 scprits]# sed -n 3~2p passwd #打印文件中从第3行开始,并且每隔2行就打印一行
[root@node2 scprits]# sed -n $p passwd  #打印最后一行。
[root@node2 scprits]# sed -n 2,5p passwd  #打印第2行至第5行。
[root@node2 scprits]# sed -n 2,$p passwd #打印第2行到最后一行。
[root@node2 scprits]# sed -n /root/p passwd 
#打印指定匹配的行。
[root@node2 scprits]# sed -n /root/,3p passwd
#打印文件中指定匹配的行的到第6行。
[root@node2 scprits]# sed -n 1,/ft/p passwd 
#打印文件中第1行到指定匹配模式行的内容。
[root@node2 scprits]# sed -n /ftp/,$p passwd
#打印文件中指定匹配模式行到最后一行
[root@node2 scprits]# sed -n /ftp/,+2p passwd
#打印文件中匹配指定模式的行及其后面2行。
[root@node2 scprits]# sed -n /ftp/,/ntp/p passwd
#打印文件中从匹配指定模式的行到匹配另一个指定模式的行的内容。

打印文件中的行号

[root@node2 scprits]# sed -n $= passwd  #打印文件的总行数。
[root@node2 scprits]# sed -n /root/{=;p} passwd
1
1.1.root:x:0:0:root:/root:/bin/bash
10
1.1.operator:x:11:0:operator:/root:/sbin/nologin
#打印文件中包含root的行号及其内容。

从文件中读取向文件中写入。

[root@node2 scprits]# touch sj.txt
[root@localhost shell]# sed -n r ip.txt sj.txt                #在文件sj.txt最后一行读入文件ip.txt的内容。
            [root@localhost shell]# sed -n 1w sj.txt ip.txt                 #将文件sj.txt的第一行写入到文件ip.txt 
            [root@localhost shell]# sed -n -e 1w sj.txt -e $w sj.txt ip.txt            #将文件sj.txt的第一行到最后一行写入到文件ip.txt.
            [root@localhost shell]# sed -n /2.2.2.2/w sj.txt ip.txt         #将文件sj.txt中匹配模式/2.2.2.2/的行写入到ip.txt文件中。
            [root@localhost shell]# sed -n /2.2.2.2/,$w sj.txt ip.txt     #将文件sj.txt中匹配模式/2.2.2.2/的行到最后一行都写入到ip.txt文件中。
            [root@localhost shell]# sed -n /2.2.2.2/,4w sj.txt ip.txt        #其后的4行。

在sed中使用shell变量。

[root@node2 scprits]# cat > input.file << eof
> The name of terminal which you are using is _terminal-type_.
> eof
[root@node2 scprits]# sed "s/_terminal-type_/$TERM/" input.file
The name of terminal which you are using is vt100.
当sed指令使用的是shell变量时,它可能会是任意字符串,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sed练习2

原文:https://www.cnblogs.com/liujunjun/p/11973485.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!