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
”