Linux - sed命令
Linux sed命令
sed命令是以理script来处理文本文件。
sed可依照script指令,来处理、编辑文本文件。它主要是用来自动编辑一个或多个文件,简化对文件的反复操作等。
语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
sed可选参数:
-n
:使用安静模式,在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。-e
:sed将要执行的内容-f
:表示在对哪个文件执行sed操作-r
:支持扩展表达式-i
:直接修改文件内容
script可选参数:
a
:新增,a后面可以接字符串,而这些字符串会再新的一行出现(目前的下一行)c
:取代,c后面可以接字符串,这些字符串可以取代n1,n2之间的行d
:删除,后面不接东西i
:插入:i后面可以接字符串,而这些字符串会再新的一行出现(目前的上一行)p
:打印,将某个选择的数据打印,通常回合sed -n
一起运行s
:取代,可以使用正则匹配
例如,在testfile文件的第四行后添加一行,并将结果输出:
sed -e '4a/newLine testfile'
1. 对行的操作
1.1. 以行为单位的新增、删除
例如,将/etc/passwd的内容列出并且打印行号,同时将2-5行删除:
nl /etc/passwd | sed '2,5d'
sed的动作为'2,5d'
,d就是删除,2,5
就是2到5行,用逗号分隔。
sed后面接的动作,务必加上两个单引号。
例如,删除第二行:
nl /etc/passwd | sed '2d'
例如,删除第三行到最后一行:
nl /etc/passwd | sed '3,$d'
例如,在第二行后,加上"drink tea":
nl /etc/passwd | sed '2a drink tea'
如果是在第二行前:
nl /etc/passwd | sed '2i drink tea'
添加两行及两行以上
如果要添加两行及两行以上,在第二行后面加入两行字
nl /etc/passwd | sed '2a Drink tea or\ > drink beea'
每一行之间都必须用反斜杠\
来区分
1.2. 以行为单位的替换、显示
例如,将第2-5行的内容取代成为"No 2-5 number":
nl /get/passwd | sed '2,5c No 2-5 number'
2. 对数据的操作
2.1. 数据的搜寻、删除
删除/etc/passwd所有包含root的行,其他行输出(使用/数据/
来匹配数据):
nl /etc/passwd | sed '/root/d'
2.2. 数据的搜寻、执行命令
搜索 /etc/passwd 找到 root 对应的行,并把bash替换成blueshell,再输出
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}'
这里讲解下各个参数:
/root/
:查找root所在的地方/bash/blueshell/
:将bash替换成blueshell;
:每个命令之间要用分号分隔,{}
:sed不同的编辑命令,用花括号分隔。比如这里其实是两部分,第一部分搜寻root,第二部分替换
2.3. 数据的搜寻、替换
基本语法:
sed 's/要被取代的字符串/新的字符串/g'
因为匹配可以使用正则表达式,所以有很大的灵活性。
例如搜索出本机的IP:
ifconfig eth0 | grep 'inet' | sed 's/^.*inet //g' | sed 's/net.*$//g'
2.4. 复合操作
可以将多条sed操作写在一起来执行。
写一条sed命令,删除/etc/passwd
第三行到末尾的数据,并把bash
替换成blueshell
:
cat /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'