sed

作用:编辑匹配的行

格式:sed [options] 'command' FileName

--------------------------------------------------------------------------

[options]

-n静默模式,不会产生输出;除非commmd部分有p,则会输出处理后的和p相关的行

-r启用扩展正则表达式

-e多重编辑,格式sed -e 'command1' -e 'command2' FileName

-i直接修改文件,不在终端产生输出

-f 把多个command写到脚本中,在脚本文件中的子命令串就不需要输入单引号了,每行一条command

--------------------------------------------------------------------------------------------------------

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'

 在匹配行的上一行插入指定的内容'1,2i info'

 c 行替换,如果是连续行,则多行只替换一次'1,5c info' 前五行替换为1个info

 d 删除匹配的行 '1,5d'

 p print 匹配行(一般与sed -n一起使用输出匹配行)

 s 替换 ,最重要单独讲

--------------------------------------------------------------------------------------------------------------

子命令中s的用法

格式 [address]s/pattern/replacement/flags

[address]为上面讲到的匹配方式,用于确定哪些行需要进行替换处理

pattern为需要替换的正则表达式

replacement为替换为的内容

replacement可以使用以下特殊符号:

&表示pattern匹配到的整个结果集

\1,...\9表示分组匹配的结果,最多9个需要sed -r

flags可选项

缺省表示,仅需要替换第一匹配到内容

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 显示不包含匹配文本的所有行

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值