sed常用知识点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed常用知识点相关的知识,希望对你有一定的参考价值。
p 打印模式空间内容
d 删除模式空间内容
a 追加一行
i 插入一行
c 替换一行
! 非
n 读入一行,覆盖掉模式空间内容
举个例子echo -e ‘1\n2\n3\n4‘|sed ‘n;s/\n//‘
首先读入第一行,此时模式空间为1$
然后执行n命令,输出模式空间后,读入下一行,此时模式空间为2$,然后执行之后的s/\n//
接下来再读入下一行,此时模式空间为3$
。。。
N 读入一行,追加到模式空间中
举个例子echo -e ‘1\n2\n3\n4‘|sed ‘N;s/\n//‘
首先读入第一个行,此时模式空间为1$
然后执行N命令,追加到模式空间,此时模式空间为1\n2
接着执行s/\n//命令,将\n删除,然后输出模式空间内容12
接下来继续读入下一行,此时模式空间为3$
。。。
p 打印模式空间内容
举个例子echo -e ‘1\n2\n3\n4‘|sed ‘/2/p‘
首先读入第一行,此时模式空间为1$,不匹配
然后读入第二行,此时模式空间为2$,匹配执行p命令
。。。
注:由于sed逐行执行,模式输出模式空间内容,所以当匹配执行p的时候,匹配行会打印两次
P 打印模式空间第一行
举个例子echo -e ‘1\n2\n3\n4‘ |./sedsed -d --hide=hold ‘N;P‘
首先读入第一个行,此时模式空间为1$,然后执行N命令,读入下一行并追加到模式空间,此时模式空间为1\n2,然后执行P命令打印模式空间第一行也就是\n前面的内容
然后再模式输出模式空间
接下来继续读入下一行,此时模式空间为3$
。。。
d 删除模式空间内容
举个例子echo -e ‘1\n2\n3\n4‘ |./sedsed -d --hide=hold ‘/2/d‘
首先读入第一行,此时模式空间为1$,不匹配自动输出
再读入第二行,此时模式空间为2$,匹配,执行d命令,清空模式空间
接着读入下一行,此时模式空间为3$
。。。
注d执行后不会传入到标准输出去,还会放弃之后的命令,读取新的内容
D 删除模式空间第一行内容
举个例子echo -e ‘1\n2\n3\n4‘ |./sedsed -d --hide=hold ‘N;D‘
首先读入第一行,此时模式空间为1$,执行N命令,此时模式空间为1\n2,然后执行D命令,删除第一行后为2$,不传入标准输出,放弃后面命令读取下一行
读入下一行,此时模式空间为2\n3。。。
h将当前模式空间中内容覆盖至保持空间
H将当前模式空间中的内容追加至保持空间
g将当前保持空间中内容覆盖至模式空间
G将当前保持空间中的内容追加至模式空间
x将当前保持空间和模式空间内容互换
#################################
1.删除空行
一般情况 sed ‘/^$/d‘ file
特殊情况,存在tab等制表符 sed ‘/^\s*$/d‘ file
\s代表 tab \r \n 空格等
2.打印行号
sed -n ‘/if/=‘ file
打印匹配if的行的行号
sed -n ‘$=‘ file
打印文件共计行数
3.多行命令
N读取下一行到模式空间,插入到模式空间当前行的下面一行并以\n分割;n是先将模式空间内容输出之后再读入到模式空间代替之前的内容
D删除模式空间的第一行,第一行为\n之前的内容;d是删除模式空间中所以内容
P打印模式空间的第一行,第一行为\n之前的内容;p是打印模式空间中所以内容
注,print命令一般使用在next之后,delete之前
h将模式空间的内容复制到保持空间,覆盖保持空间;H将模式空间内容追加到保持空间,在原保持空间后加入换行符
g将保持空间的内容复制到模式空间,覆盖模式空间;G将保持空间内容追加到模式空间,在原模式空间后加入换行符
x交换模式空间和保持空间内容
4.标签
b标签,无条件跳转
sed ‘/lable/ba;s/lable/LABLE/;:a;s/$/\!/‘ file
如果匹配lable则跳转至标签a处
不匹配lable则从左到右依次执行
t标签,有条件跳转
sed ‘/lable/s/lable/LABLE/;t;s/$/\!/‘ file
如果匹配就执行匹配后面的替换
不匹配就跳到t标签处,执行后面的替换
本文出自 “八英里” 博客,请务必保留此出处http://5921271.blog.51cto.com/5911271/1749156
以上是关于sed常用知识点的主要内容,如果未能解决你的问题,请参考以下文章