linux高级原6

使用sed 进行文本替换

sed是流编辑器(stream editor)的缩写。它是文本处理中不可或缺的工具,能够配合正则表达式使用,功能不同凡响。sed命令众所周知的一个用法是进行文本替换。

(1) sed可以替换给定文本中的字符串。
$ sed 's/pattern/replace_string/' file
或者
$ cat file | sed 's/pattern/replace_string/'
该命令从stdin中读取输入。

(2) 在默认情况下,sed只会打印替换后的文本。如果需要在替换的同时保存更改,可以
使用-i选项,可以将替换结果应用于原文件。很多用户在进行替换之后,会借助重
定向来保存文件:
$ sed 's/text/replace/' file >newfile
$ mv newfile file
其实只需要一行命令就可以搞定,例如:
$ sed -i 's/text/replace/' file

(3) 之前看到的sed命令会将每一行中第一处符合模式的内容替换掉。但是如果要替换所
有内容,我们需要在命令尾部加上参数g,其方法如下:
$ sed 's/pattern/replace_string/g' file
后缀/g意味着sed会替换每一处匹配。但是有时候我们只需要从第n处匹配开始替
换。对此,可以使用/Ng选项。

$ echo thisthisthisthis | sed 's/this/THIS/2g'
thisTHISTHISTHIS

1. 移除空白行
用sed移除空白行不过是小菜一碟。空白行可以用正则表达式 ^$ 进行匹配:
$ sed '/^$/d' file
/pattern/d会移除匹配样式的行。
在空白行中,行尾标记紧随着行首标记。
2. 直接在文件中进行替换
如果将文件名传递给sed,它会将文件内容输出到stdout。如果我们想修改文件内容,可以
使用-i选项:
$ sed 's/PATTERN/replacement/' -i filename

例如,使用指定的数字替换文件中所有3位数的数字:
$ cat sed_data.txt
11 abc 111 this 9 file contains 111 11 88 numbers 0000
$ sed -i 's/\b[0-9]\{3\}\b/NUMBER/g' sed_data.txt
$ cat sed_data.txt
11 abc NUMBER this 9 file contains NUMBER 11 88 numbers 0000
上面的单行命令替换了所有的3位数字。正则表达式\b[0-9]\{3\}\b用于匹配3位数字。[0-9]
表示数位取值范围,也就是说从0~9。{3}表示匹配之前的字符3次。\{3\}中的\用于转义{和}。
\b表示单词边界。


3. 已匹配字符串标记(&)
在sed中,我们可以用 &标记匹配样式的字符串,这样就能够在替换字符串时使用已匹配的内容。

例如:
$ echo this is an example | sed 's/\w\+/[&]/g'
[this] [is] [an] [example]



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值