sed(示例)

sed(示例)


sed [选项]  [地址界定]编辑命令   被编辑文本

 

地址界定:
#
代表行数,/part/代表包含part字符的行
~代表不进,1~2表示从第一行开始每个一行取行,即能表示
奇数行,
2~2表示偶数行

#,#   #,+#   /part1/,/part2/   #,/part1/
 单独使用  /part/ 全文去匹配

没有/part1/,#

编辑命令
d  p
 a\
文本(在指定行后面追加)反斜杠也可空格代替
  i\
文本(在行前插入)
  c\文本 (把行替换为指定字符串)

w/path/filename 保存匹配到的行到指定文件

若文件已经存在则直接覆盖里面的内容,不提示
r/path/filename 读取指定文件的内容到匹配到的行后

= 为模式空间中保存的行打印行号

(行号是插入到匹配到的行的前面)

!对模式空间中匹配到的行取反 ????

 

编辑命令不能组合使用;

/part1/,/part2/是指在全文依次去匹配
这中模式,见示例
1

选项
-n   -e  -f /path/script_file (读取编辑脚本)  -r(扩展正则)
-i.xxx 
备份文件再修改源文件

 

s/// 查找替换,s@@@  s###

s///g  s///p   s///w/path/to/somefile

示例示例3

 

示例1

[root@centos7 19:25:48 datal#sed -n /zmh/ ,/bin/p  zmh : x : 1000 : 1000 : zmh : 'home/ zmh : /bin/bash  tomcat: x: 1001 : 1001: : 'home/ tomcat: 'bin/ bash  (root@centos7 datal#sed •n / root/ ,/bin/p  root : x: O: O: root: / root: /bin/bash  /bin:/sbin/nologin  operator: x : Il : : operator: / root : / sbin/ nologin  : x : 12 : 100 : ganrs : /usr/games : / sbin/ nologin  (rootgcentos7 datal*  / etc/ pass wd  / etc/ pass wd

第二个匹配结果有两组,sed先匹配到root开头的第一行保存后,再去匹配bin,此时从第二行读入发现恰好也匹配到了bin,因此本次/root/,/bin/模式匹配完成。但是sed不会停止反而会继续往下匹配。因此
接下来发现第三行
(operator开头行)中包含root 然后保存,再继续往下一行去匹配bin,找到后保存。

这时候就有了第二组/root/,/bin/模式。sed会继续再往下搜索但是没有再匹配到/root/,/bin/模式而结束。打印输出匹配到的两组结果!

 

示例2

[root@centos7 20:30:16 ens33 1 sed -n '2p' I sed -r s/. *inet ( *  . ) net.  172.20.95.240  [root@centos7 data]"

 

示例3

[root@centos7 "/etc/sysconfig/network/" I sed •r •s/ (  / etc/ sys config/  [root@centos7 "/etc/sysconfig/network/" I sed •r •s/ (  network/

 

示例:

nl /etc/passwd |sed '2d'只删除第 2

sed '/^#\|^[[:space:]]*$/d' f1搜索出来以#号开头或有空白行

sed –n '2p' /etc/passwd    输出第二行

sed –n '1,4p' /etc/passwd从第一行到第四行显示

sed –n '/root/p' /etc/passwd    显示匹配到root的行

sed –n '2,/root/p' /etc/passwd 2行开始匹配root,并显示

sed -n '/^$/=' file 显示空行行号

sed –n –e '/^$/p' –e '/^$/=' file 多点编辑,我觉得类似grep-e选项,或者的关系

sed '/root/a\superman' /etc/passwd行后添加字符

sed '/root/i\superman' /etc/passwd 行前

sed '/root/c\superman' /etc/passwd 代替行

sed '/^$/d' file删除空行,不包括空格组成的空行

sed '1,10d' file

nl /etc/passwd | sed '2,5d'

nl /etc/passwd | sed '2a tea'在第二行后面添加tea

sed 's/test/mytest/g' example test替换为mytest

sed –n 's/root/&superman/p' /etc/passwd 单词后,相当于后向引用,替换为rootsuperman

sed –n 's/root/superman&/p' /etc/passwd 单词前

sed -e 's/dog/cat/' -e 's/hi/lo/' pets

sed –i.bak 's/dog/cat/g' pets 编辑前先将pets备份为pets.bak然后进行替换编辑

 

涉及保持空间的高级用法:

sed  -n  'n;p'  FILE:显示偶数行;

sed  '1!G;h;$!d'  FILE:逆序显示文件的内容;

sed  ’$!d'  FILE:取出最后一行;

sed  '$!N;$!D' FILE:取出文件后两行;

sed '/^$/d;G' FILE:删除原有的所有空白行,而后为所有的非空白行后添加一个空白行;

sed  'n;d'  FILE:显示奇数行;

sed 'G' FILE:在原有的每行后方添加一个空白行;

 

 

posted @ 2018-03-23 16:03  子何  阅读(230)  评论(0)    收藏  举报