sed笔记
sed [-n][-e] '[address1,[address2]] !{cmd}' fn
sed [-n] -f sedsrc fn
n:仅打印p或s指定的行
e:下一个参数为命令'[address1,[address2]] cmd'
f:下一个参数是sed脚本
sed命令可以指定0-2个地址,每个地址是行号或行寻址的正则表达式.若没有指定地址则命令作用于每一行;若只有一个地址则命令作用于与该地址匹配的任意行;若指定了逗号分隔的两个地址则命令作用于匹配的第一个地址到第二个地址之间的每一行,未匹配第二个地址时则默认到文件末尾;若地址后接!则命令作用于不匹配该地址的所有行.
a,i,r,q,=只作用于单行
:label:标签是任意不多于7个字符的序列用于实现b或t的转移,以冒号开始并占据一行,冒号和标签之间无空格.
[address]=:打印被匹配行的行号(需要抑制默认输出),eg:sed -n '/^if/ {=;p}' test.txt打印if开头的行号和内容
[address]a\text:在parttern space中将text放入匹配行的下一行
[address]i\text:在parttern space中将text放入匹配行的上一行
[address1,[address2]]c\text:用text替换parttern space中的内容
[address1,[address2]]b [label]:label后的命令是作用于当前行的下一个命令,若未指定label则不再有命令作用于当前行
[address1,[address2]]t [label]:若在行寻址范围中成功进行了替换则label后的命令是作用于当前行的下一个命令,若未指定label则不再有命令作用于当前行
[address1,[address2]]d:从parttern space中删除匹配行,该行不会到标准输出.脚本的第一个命令作用于新的输入行
[address1,[address2]]D:删除由N创建的parttern space中第一个\n之前的内容,并用脚本的第一条命令作用于\n之后的内容
[address1,[address2]]n:读取下一个输入行到parttern space,当前行被送到标准输出,行计数器递增,n后面的命令作用于当前行
[address1,[address2]]N:读取下一个输入行追加到parttern space,新加行与原有行用\n来分隔.用\n可匹配两行之间的\n
[address1,[address2]]p:打印匹配的行,若没有抑制输出(-n),则将导致匹配的行重复输出
[address1,[address2]]P:打印由N创建的parttern space中第一个\n之前的内容
[address]q:遇到匹配行时退出
[address1]r fn:读取fn并追加到parttern space中,fn不存在不报错
[address1,[address2]]w fn:将parttern space的内容写入到fn中,fn不存在就创建
[address1,[address2]]y/ab/AB/:在匹配的行中用A替换a,B替换b,无论ab是否相临
[address1,[address2]]g:将hold space内容复制到parttern space中
[address1,[address2]]G:将hold space内容追加到parttern space中,若hold space为空则将\n追加至parttern space
[address1,[address2]]h:将parttern space内容复制到hold space中
[address1,[address2]]H:将parttern space内容追加到hold space中,若parttern space为空则将\n追加至hold spac
[address1,[address2]]x:交换parttern space和hold space内容
[address1,[address2]]s/parttern/replacement/flags(ngpw):在匹配的行中用replacement替换parttern
n:1-512,对匹配的第n次情况进行替换
g:global,对所有匹配进行替换
p:替换成功后并打印
w fn:替换成功后后写入fn中,fn最多10个
若parttern中含有/则定界符可用其他字符代替,eg:s#/usr/bin#/root/bin#g
replacement是一个字符串,用来替换与正则表达式匹配的内容,replacement中的&表示parttern中正则表达式匹配的内容;replacement中的\n(数字)表示匹配的第n个子串,在parttern中用\(和\)指定