首先声明一下,我要写的东西不是给一点基础的小白看的(因为写那种东西对我自己一点好处都没有,那真的只是为大众服务了),我写的东西比较适合学过sed,但没学透的那种半吊子(比如在下)看的,因为这种人很容易忘记,所以把学过的东西整理一下,方便复习。当然,由于有些高级的用法我实在也基本上用不到,所以就只罗列一些简单的,我认为常用的方法吧。如果前面没看懂,可以看看后面的示例。
Sed————命令选项————
-n,静默模式,即不打印输出
-i,直接在文本上处理
-e,要使用多个命令时会用到
Sed————功能参数————
a,向后追加
i,向前插入
c,替换整行,或连续几行
d,删除
p,打印
s,替换每一行的第一个指定的字符或字符串
g,常与s连用,替换整个文本中的指定的字符或字符串
q,退出sed
r,读入一个文本
w,写入一个文本
!,非
=,打印当前行号
y,把一个字符换成领一个字符
模式空间:sed是从头到尾对文本一行一行地处理,正在处理的行是从文本读入后放在模式空间中的
Sed————多行处理————
n,读入下一行到模式空间
N,追加下一行到模式空间,用多个N可追加多行
D,与N连用,删除模式空间的第一行,即从头删到第一个\n
P,与N连用,只打印模式空间的第一行
保留空间:sed提供的一块可以与模式空间交换文本的空间,原本为空
Sed————保留空间命令————
h,将模式空间复制到保留空间
H,将模式空间追加到保留空间
g,将保留空间复制到模式空间,如保留空间为空,则复制空行
G,将保留空间追加到模式空间,如保留空间为空,则追加空行
x,将保留空间的内容与模式空间的内容互换
Sed————元字符————
^ 锚定行的开始
. 匹配一个非换行符的字符
- 匹配零或多个字符
^] 匹配一个不在指定范围内的字符
(…) 保存匹配的字符
& 用于表示替换命令中的匹配模式,如s/XXX/"&"/g,就是将所有的XXX替换成"XXX"
<锚定单词的开始
> 锚定单词的结束
x{m}重复字符x,m次
x{m,} 重复字符x,至少m次
x{m,n}重复字符x,至少m次,不多于n次,
——————————Sed示例——————————
sed -n ‘/xxx/,/yyy/p’ file
打印有xxx字符串的行到有yyy字符串的行
sed ‘s/xxx/yyy/2’ file
把每一行的第二个xxx换成yyy
sed ‘2s/xxx/yyy/g’ file
把第二行所有的xxx换成yyy
sed ‘/xxx/s/yyy/zzz/’ file
把有xxx行的yyy换成zzz
sed ‘2{s/xxx/yyy/g;s/aaa/bbb/g;}’ file
把第二行的所有xxx换成yyy,所有aaa换成bbb
sed ‘2s/xxx/yyy/g;10s/aaa/bbb/g’ file
sed -e ‘2s/xxx/yyy/g’ -e ‘10s/aaa/bbb/g’ file
把第二行的所有xxx换成yyy,第十行所有aaa换成bbb
sed ‘s/xxx/yyy/w file2’ file1
把每一行的第一个xxx换成yyy,被更换的行将被输出到file2
sed ‘/xxx/r file2’ file1
在有xxx的行的后面追加file2的所有文本
sed ‘s!xxx!yyy!g’ file
把所有xxx都换成yyy,当file中有大量的/时,用s/xxx/yyy/g可能会造成错误,而其实s/xxx/yyy/g中的/可以用其他字符代替,比如!,#
sed ‘/xxx/{n;d;}’ file
把带有xxx的行的下一行读入到模式空间,并删除
sed ‘y/abc/def/’ file
把a换成d,b换成e,c换成f
sed ‘/xxx/{N;s/\n//;}’ file
把有xxx的行追加到模式空间,并删除第一个回车符
sed ‘/^$/{N;/xxx/D;}’ file
如果空行后面的一行带有字符串xxx,则删除空行
sed -e ‘/xxx/,/yyy/{H;d}’ -e ‘/zzz/G’ file
把xxx到yyy之间的所有行都剪切到zzz行后面,只能把文本前面的行剪切到后面
sed ‘$!G’ file
除最后一行外,每一行的后面追加一条空行
sed ‘s/(xxx) yyy/\1 zzz/g’ file
把字符串xxx yyy中的’ yyy’换成’ zzz’,(xxx)表示锁定xxx,即不改变xxx,\1表示锁定的元素是字符串的第一个元素
sed -n ‘/<xxx>/p’ file 打印含有xxx单词的行
sed -n ‘/<xxx/p’ file 打印以xxx为开头的单词的行
sed -n ‘/xxx>/p’ file 打印以xxx为结尾的单词的行