linux下sed+grep+regex正则表达式批量替换文本

今天有一个需求是对文本中的字符串进行批量替换,其中需要用到正则表达式匹配指定模式。但就是这个正则让我踩了很多坑,特此记录。

linux下的批量文本替换方法百度一抓一大把,无非是sed结合grep,就是下面的指令:

sed -i "s/原字符串/新字符串/g" 'grep -rl 原字符串 搜索根目录'

其中,sed实现字符串替换的基本用法是:

sed -i "s/原字符串/新字符串/g" 文件名

而grep -rl指令可以在给定的根目录搜索给定字符串并返回所有包含指定字符串的文件名。

 

但是实践中遇到这样的问题,对于一个普通的字符串比如“abcd”只需要grep -rl abcd 即可实现在当前目录下搜索所有包含abcd字符的文件并列出,但是对于有特殊符号的字符串比如“(abcd”,“ab  cd”,或者需要用到正则表达式“ab.*cd”,sed就会报错:

sed -i "s/(ab.*cd)/abcd/g" 'grep -rl "(ab.*cd)"'

ERROR:
sed: 无法读取 grep -rl "(ab.*cd)": 没有那个文件或目录

查了很多资料,最后用到xargs,通过以下指令成功实现:

grep -rl "(ab.*cd)" | xargs sed -i "s/(ab.*cd)/abcd/g"

简单讲解一下,grep -rl "(ab.*cd)"给出了文件名单,通过管道“|”传递给xargs。

xargs 为之后的sed指令提供grep列出的文件名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值