作用:编辑匹配的行
格式:sed [options] 'command' FileName
--------------------------------------------------------------------------
-n静默模式,不会产生输出;除非commmd部分有p,则会输出处理后的和p相关的行
-r启用扩展正则表达式
-e多重编辑,格式sed -e 'command1' -e 'command2' FileName
-i直接修改文件,不在终端产生输出
-f 把多个command写到脚本中,在脚本文件中的子命令串就不需要输入单引号了,每行一条command
--------------------------------------------------------------------------------------------------------
'command'等于'匹配+子命令'
4第4行
2,4第2-4行
2,+4从第二行开始再接着往下数4行,也就是2-6行
4,~3从4行开始到下一个3的倍数即4-6行
4~3从4行开始到每隔3行即4、7、10...行
$表示最后一行,第1行是1不是^
1!除了第1行,!表示取反
格式 /正则表达式/ 对匹配满足的行行子命令
/正则表达式1/ ,/正则表达式2/ 对第一次匹配到正则表达式1的行和第一次匹配到正则表达式2的行(这两行包括)之间的行执行子命令
1,/正则表达式/ 从第一行到匹配正则表达式的第一行
-----------------------------------------------------------------------------------------
a 在匹配行的下一行插入指定的内容'1,2a info'
i 在匹配行的上一行插入指定的内容'1,2i info'
c 行替换,如果是连续行,则多行只替换一次'1,5c info' 前五行替换为1个info
d 删除匹配的行 '1,5d'
p print 匹配行(一般与sed -n一起使用输出匹配行)
s 替换 ,最重要单独讲
--------------------------------------------------------------------------------------------------------------
格式 [address]s/pattern/replacement/flags
[address]为上面讲到的匹配方式,用于确定哪些行需要进行替换处理
pattern为需要替换的正则表达式
replacement为替换为的内容
replacement可以使用以下特殊符号:
&表示pattern匹配到的整个结果集
\1,...\9表示分组匹配的结果,最多9个需要sed -r
缺省表示,仅需要替换第一匹配到内容
n可以取1-512,在该行中对第n次匹配到的内容进行替换
g所有匹配均替换
p打印该行修改后的内容
i对pattern匹配到的内容不区分大小写
w fileName 写入到文件file中
flag可以组合使用
---------------------------------------
例:[root@localhost ~]# sed -n '1,$s/for/kouwq/p' test.sh
删除文本文件中每一行开头和结束的空格和Tab# sed -i -r -e 's/[ \t]+$//' -e 's/[ \t]+$//' test.sh
删除空白行# sed -i '/^$/d' test.sh
例:grep "doDecompressOut" log | sed -r '/start/s/(timer_start\=)([0-9]+)(\.)/\2/' | awk -F, '/start/{print $2}' | sed -r 's/[ ]+360033433//' > data
例:sed -r 's#(^export ICP_ROOT=)(.*)#\1'$ICP_ROOT'#' setenv.sh
把(.*)替换为$ICP_ROOT 分组替换
或者: sed -r "s#(^export ICP_ROOT=)(.*)#\1$ICP_ROOT#" setenv.sh
例:
thisyear=`date +%Y`
find . -type f -name '*.c' -exec sed -i -r "s/(20..)-20../\1-$thisyear/" {} \;
grep
-E 能使用扩展正则表达式
-i 忽略字符大小写
-n 在显示符合范本样式的那一列之前,标示出该列的行号
-v 显示不包含匹配文本的所有行