Sed简介
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。
sed命令形式
1 | sed [options] 'command' file(s) |
sed command
command部分可以分为两部分,一部分是确定范围部分,一部分是处理方式部分。
确定范围部分
1 指定行数:例如3,5表示第3、第4和第5行;5,$表示第5行至最后一行;
2 用模式匹配进行指定:例如/^[^dD]/表示匹配行首不是以d或D开头的行等;
处理方式部分呢,有很多命令可用,介绍几个最常用的:
d 表示删除行
p 打印该行
r 读取指定文件的内容
w 写入指定文件sed ‘/200[4-6]/w new.txt’ mysed.txt(w new.txt表示将来源于mysed.txt中含有2004、2005、2006的行写入到new.txt文件中)
a\ 在特定行”下面”插入特定内容sed ‘/2004/a\China’ mysed.txt
i\ 在特定行”上面”插入特定内容sed ‘/2004/i\China’ mysed.txt
y 就表示将第一栏的每个字符都替换为相对应的第二栏的字符sed ‘y/eijng/EIJNG/‘ mysed.txt
n; 对匹配行的下一行进行处理sed ‘/2004/{n;y/eijng/EIJNG/;}’ mysed.txt (找含有2004的行,然后将它下面的一行中的eijng替换为大写的EIJNG。这里面的”n;”起到了”移至下一行”的作用。n背后的含义其实是将下一行放到模式空间中去)
sed选项
1 | -e command, --expression=command 允许多台编辑,sed -n -e '1,2p' -e '4p' mysed.txt |
sed元字符集
1 | ^ 锚定行的开始 如:/^sed/匹配所有以sed开头的行。 |
sed实例
例一 显示test文件的第20到30行:sed -n ‘20,30p’ test
例二 将所有以d或D开头的行的所有小写x变为大写X:sed ‘/^[dD]/s/x/X/g’ test
例三 删除每行最后的两个字符:sed ‘s/..$//‘ test
例四 删除每一行的前两个字符:sed ‘s/..//‘ test
例五1
2
3
4
5$cat mysed.txt
Beijing Beijing Beijing Beijing
$sed 's/\(Beijing\)\(.*\)\(Beijing\)/\12008\2\32008/' mysed.txt
Beijing2008 Beijing Beijing Beijing2008
##这个命令稍显复杂,其中用到了一个技巧,就是预存储,即被\(和\)括起来的匹配内容会被按顺序存储起来,存储到\1、\2…里面。这样你就可以使用\加数字来调用这些内容了。这个例子就是使用了这个技巧,分别存储了三个内容,分别为匹配Beijing、匹配.*和匹配Beijing。
任意字符: sed -n ‘/.ing/‘p temp.txt 注意是.ing,而不是ing
‘s/^[][]//g’ 删除行首空格
‘s/^$/d’ 删除空行
‘s/COL/(…/)//g’ 删除紧跟COL的后三个字母
morehttp://www.grymoire.com/Unix/Sed.html
Contribution from :
http://roclinux.cn/?p=1363
http://www.iteye.com/topic/587673
http://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html