每日掌握一个Linux命令 之sed工具
sed:全称 stream editor,是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据进行替换、删除、新增、选取等特定工作。
用法:
sed [-nefr] [动作]
参数:
-n : 安静模式,在一般sed的用法中,所有来自STDIN的数据一般都会被列出到屏幕上,但如果加上-n参数后,则只有经过sed特殊处理的那一行(或者操作)才会被列出来
-e : 直接在命令行模式上进行sed的动作编辑
-f : 直接将sed动作写在一个文件内,-f filename 则可以执行filename内的sed操作
-r: sed 动作支持的是扩展型正则表达式的语法(默认是基础正则表达式语法)
-i: 直接修改读取的文件内容,而不是由屏幕输出
[动作]说明:
[n1[,n2]] funtion
n1,n2:定会存在,一般代表选择进行动作的行数,例如,“10,20[动作行为]” ,在第10行到20行之间进行
function:
a:append 新增,后可接字符串,而字符串会在新的一行出现
c:change替换,c后可接字符串,这些字符串可以替换n1,n2之间的行
d: delete 删除,后通常不接任何参数
i: insert 插入,i后可接字符串,而这些字符串会在新的一行出现,目前的上一行
p: print 打印,将某个选择的数据打印出来,通常会与参数sed -n 一起运行
s: 替换,可以直接进行替换工作,通常这个s的动作可以搭配正则表达式
功能:
1. 以行为单位的新增/删除功能(不会修改原文件)
使用动作参数: d、 a 、 i
nl /etc/passwd | sed '2,5d' <== 删除第2~5行
nl /etc/passwd | sed '2a drink tea' <== 在第2行之后,添加新行,行的内容为“drink tea”
nl /etc/passwd | sed '2i drink tea' <== 在第2行之前,插入新行,行的内容为“drink tea”
2. 以行为单位的替换与显示功能(不会修改原文件)
使用动作参数: c、p
nl /etc/passwd | sed '2,5c No 2-5 lines' <== 将第2~5行替换为 No 2-5 lines
nl /et/cpasswd | sed -n '2,5p' <== 仅显示/etc/passwd中的提2~5行,这里要与-n一起执行,-n代表的是“安静模式”
3. 部分数据的查找并替换的功能(不会修改原文件)
基本替换格式:
sed 's/要被替换的字符串/新的字符串/g'
例如: /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' <== 将IP前面的部分予以删除
4. 直接修改文件内容(会修改原文件,慎用)
使用 -i 参数
sed -i 's/\.$/\!/g' regular_express.txt <== 将regular_express.txt文件内每一行结尾为'.' 的换成'!'