1、sed的使用语法
使用sed命令行格式为:
sed [选项] sed命令 输入文件。
sed选项如下:
n 不打印;sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。p命令可以用来打印编辑行。
c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条 sed命令, 此选项无用,但指定它也没有关系。
f 如果正在调用sed脚本文件,使用此选项。此选项通知 sed一个脚本文件支持所有的 sed 命令,例如:sed -f myscript.sed input_file,这里myscript.sed即为支持sed命令的文件。
由于不接触初始化文件,如果想要保存改动内容,简单地将所有输出重定向到一个文件 即可。下面的例子重定向 sed命令的所有输出至文件‘ myoutfile’,当对结果很满意时使用这种方法。
sed 'some-sed-commands' input-file > myoutfile
sed浏览输入文件时,缺省从第一行开始,有两种方式定位文本:
- 使用行号,可以是一个简单数字,或是一个行号范围。
- 使用正则表达式。
x x为一行号,如1x , y 表示行号范围从x到y,如2,5表示从第2行到第5行
/pattern/ 查询包含模式的行。例如/disk/或/[a-z]/
/pattern/pattern/ 查询包含两个模式的行。例如/disk/disks/
pattern/, x 在给定行号上查询包含模式的行。如/ribbon/,3
x, /pattern/ 通过行号和模式查询匹配行。3 ./vdu/
x,y! 查询不包含指定行号x和y的行。1 , 2!
sed编辑命令:
p 打印匹配行
= 显示文件行号
a\ 在定位行号后附加新文本信息
i\ 在定位行号后插入新文本信息
d 删除定位行
c\ 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文件中读文本
w 写文本到一个文件
q 第一个模式匹配完成后推出或立即推出
l 显示与八进制ASCII代码等价的控制字符
{ } 在定位行执行的命令组
n 从另一个文件中读文本下一行,并附加在下一行
g 将模式2粘贴到/pattern n/
y 传送字符
n 延续到下一输入行;允许跨行的模式匹配语句
sed识别任何基本正则表达式和模式及其行匹配规则。记住规则之一是:如果要定位一特殊字符,必须使用(\)屏蔽其特殊含义。
例:
使用P查询行号:
sed -n '1'p filename.txt #查询单行
sed -n '1,2'p filename.txt #查询范围行(1-2)
sed -n '/auto/'p filename.txt #匹配单词进行查找。
sed -n '3,auto'p filename.txt #匹配行号和单词进行打印
sed -n '/\$/'p filename.txt 匹配元字符$使用、进行屏蔽
sed -n '1,$'p filename.txt 打印完整文件内容
替换命令用替换模式替换指定模式,格式为:
[address [,address]] s/ pattern-to-find /replacement-pattern/[gpwn]
s选项通知sed这是一个替换操作,并查询 pattern - to - find,成功后用replace m ent - pattern替换它。 替换选项如下:
g 缺省情况下只替换第一次出现模式,使用g选项替换全局所有出现模式。
p 缺省sed将所有被替换行写入标准输出,加p选项将使-n选项无效。
-n 选项不打印输出结果。
w 文件名 使用此选项将输出定向到一个文件。
例:
sed 's/nginx/nginx2/' filename.txt 替换单词‘nginx’为‘nginx2’
sed 's/\$//' filename.txt 删除特殊字符$
sed 's/nginx/nginx2/g' 进行全局替换。
删除所有行首的0。使用^ 符号表示模式从行首开始,^0* 表示行首任意个0。模式 s/ ^0*//g设置替换部分为空,即为删除模式。
一些sed命令集:
‘s / \ . $ / / g’ 删除以句点结尾行
‘-e /abcd/d’ 删除包含a b c d的行
‘s / [ ] [ ] [ ] * / [ ] / g’ 删除一个以上空格,用一个空格代替
‘s / ^ [ ] [ ] * / / g’ 删除行首空格
‘s / \ . [ ] [ ] * / [ ] / g’ 删除句点后跟两个或更多空格,代之以一个空格 ‘/ ^ $ / d’ 删除空行
‘s / ^ . / / g’ 删除第一个字符
‘s /CO L \ ( . . . \ ) / / g’ 删除紧跟C O L的后三个字母
‘s / ^ \ / / / g’ 从路径中删除第一个\
‘s / [ ] / [ ] / / g’ 删除所有空格并用t a b键替代
‘S / ^ [ ] / / g’ 删除行首所有t a b键
‘s / [ ] * / / g’ 删除所有t a b键