Sed: streameditor editor 流编辑器 ,主要用于文本处理。
sed命令格式:
sed -options ’expression1;expression2’ file 执行多个命令
sed -options [-e ‘expression1’] [-e ‘expression2’] file 执行多个命令
sed -options [-f scriptfile] file 通过脚本执行命令
sed -options [-f scriptfile] file > newfile #sed修改后重定向到新文件。
sed指令需要用单引号包围。
Sed默认并没有修改文件file中的数据。
sed默认在stdout输出文件的所有行。
Sed地址需要使用/address/来包围。
sed使用正则表达式可以用\BRE\包围,如果模式包含/,那么可以使用除了换行符之外的所有字符包围。
options:
-e:指定多个命令或脚本
-f:指定执行命令的脚本
-n:阻止自动输出,p可以打印匹配的行。
expression:
指令由模式和过程组成。
[address]/[line-address][!]command[arguments]
[address]表示地址,一般用模式进行寻址,address缺省表示整个文件寻址,两个地址用,隔开。
[line-address]表示只能是一个地址。
[!] 表示不匹配该地址的所有行
Command:
sed有25个命令。
使用大括号{}在一个地址中做嵌套操作:例如:
/address1/,/address2/{
/^$/d
s/string1/string2/
…
}单独一行,后面不能有空格
s命令:替换,替换模式空间中的行。
'[address]s/oldpattern/newpattern/[flag]'
flag:
n:替换每个寻址行的第n个匹配模式。默认n=1.n
n在1-512之间。
g:替换每个寻址行的所有匹配模式。
p:打印模式空间的内容
W file:如果发生替换就将这一行写入file。只写入替换的行。
用反斜杠\转义换行符:
因为反斜杠在newpattern中也用于包含换行符。
sed 's/pattern/\
\
string/' filename
等价于:
sed 's/pattern/\n\n/' filename
将匹配的项替换成两个换行符。
用反斜杠\转义与符号&:
sed 's/pattern/string1 & string2/g' filename
上面结果是: string1pattern string2
如果不转义&匹配整个pattern。
sed 's/pattern/string1 \& string2/g' filename
上面结果是:string1& string2
用反斜杠\转义\n:
sed 's/pattern/\1/' filename
上面是将pattern中匹配到的第一个字串回调到newpattern中使用。
d命令:删除,删除模式空间中的行,并不删除文件中的行。
'[address]d'
'1d'
删除第一行
'$d'
删除最后一行
’/^$/d'
删除空行
a/i/c命令:追加/插入/更改.
'[line-address]a string' filename
'[line-address]a\
string1\
string2\
string3' filename (追加三行)
在匹配到的行下面添加追加的内容
i:同上,在匹配到的行上面插入内容。
'[address]c string' filename
'[address]c\
string1\
string2\
string3' filename
将匹配到的行替换掉。
l:列表命令
sed '[address]l' filename 打印模式空间内容,将非打印字符显示为ASCII码
p:打印命令
sed '[address]p' filename 打印模式空间内容
=:打印行号
sed -n '[line-address]=' filename 只打印行号
n:下一步
sed '[address]n' filename
q:退出命令
sed '[line-address]q' filename
一旦找到和line-address匹配的行,脚本立即退出。
r/w:读/写命令
sed '[line-address]r file' filename
读file文件追加在匹配到的行后面。
sed '[address]w file' filename
将匹配到的行写入到file文件中
未完待续......