sed学习

sed
管道命令
 
#sed [-nefr] [ 动作 ]
-n:    使用安静 (silent) 模式。
-e:    直接在命令行模式上进行 sed 的动作编辑
-f:     直接将 sed  的动作写在一个文件内, -f filename 则要以执行 filename 内的 sed 动作
-r:     sed 的动作支持是扩展型正则表达示的语法(默认是基础正则表达式语法)
-i:      直接修改读取的文件内容,而不是由屏幕输出。
动作说明
[n1 [,n2]] function
n1,n2:         不见得会存在,一般代表选择进行动作的行数,举例来说,如果我的动作是需要在 10 20 行之间进行,则“ 10,20[ 动作行为 ]”
function 有下面这些参数
a:      新增, a 后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行);
c:      替换, c 的后面可以接字符串,这些字符串可以替换 n1,n2 之间的行;
d:      删除,因为是删除,所以 d 后面不接任何参数;
i:       插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行)
p:      打印,也就是将某个选择的数据打印出来。通常 p 会与参数 sed �Cn 一起运行。
s:      替换,可以直接进行替换的工作,通常 s 的动作可以搭配正则表达示。例 1,20s/old/new/g
 
例一:将 /etc/passwd 的内容列出并且打印行号,同时,请将第 2 5 行删除
#nl /etc/passwd |sed ‘2,5d’
#nl /etc/passwd | sed ‘2d’     只删除第 2
#nl /etc/passwd | sed ‘2,$d’    删除第 2 行到最后一行 $ 表示最后一行
例二:在第 2 行后面(即第 3 行)加上 ”drink tea” 字样
#nl /etc/passwd | sed ‘2a drink tea’     2 行后面
#nl /etc/passwd | sed ‘2i drink tea’        2 行前面
#nl /etc/passwd | sed ‘2a Drink tea or ……\    2 行字符
>Drink beer ?’
例三:将 2 5 行的内容替换成 ”No 2-5 number”
#nl /etc/passwd | sed ‘2,5c No 2-5 number’
例四:仅显示文件内的第 5-7
#nl /etc/passwd |sed �Cn ‘5,7p’          没有加 -n, 将会重复输出 5-7 行内容     head �Cn 7 | tail �Cn 3
例五: sed ‘s/ 要被替换的字符串 / 新的字符串 /g’
#/sbin/ifconfig eth0 |grep ‘inet addr’ | \
>sed ‘s/^.*addr://g’ | sed ‘s/Bcast.*$//g’
 
#cat /etc/man.config |grep ‘MAN’ | sed ‘s/#.*$//g’ | \
>sed ‘/^$/d’                        删除空白行
例六:直接修改文件内容
#sed �Ci ‘s/\.$/\!/g’ regular_express.txt           regular_express.txt 内每一行结尾为“ . ”的换成“ !
#sed �Ci ‘$a #This is a test ‘ regular_express.txt regular_express.txt 最后一行后加入“ #This is a test

你可能感兴趣的:(sed)