linux shell脚本 sed 替换指定文件夹下所有有空格文件路径下的内容,有坑

本文介绍了如何使用sed命令行工具进行文件替换,包括-i选项的原地编辑、-e多编辑、-n取消默认输出以及处理含有空格路径的方法。同时涵盖使用grep+xargs配合tr解决目录下空格文件问题的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sed -i 's/www.google.com/www.baidu.com/g' 文件全路径名

上面这个指令相当于把文件中所有的www.google.com 替换为www.baidu.com

选项说明备注
-e进行多项(多次)编辑可以编辑多个匹配参数
-n取消默认输出不自动打印模式空间
-r使用扩展正则表达式
-i原地编辑会修改源文件
-f指定sed脚本的文件名

语法:sed 选项 ‘s/搜索的内容/替换的内容/动作’ 需要处理的文件
其中,s表示search搜索;斜杠==/ 表示分隔符,可以自己定义;动作一般是打印p和全局替换g==(默认只替换每行第一个匹配到的内容)

另外如果有中文 ,可能不同系统版本对不上,也要注意一下

如果文件全路径名中有空格 如/opt/good file.txt,这时就会出错,需要用“”来标记一下

sed -i 's/www.google.com/www.baidu.com/g' "/opt/good file.txt"

如果我们相把一个文件夹下所有的文件都进行这样的替换

grep www.google.com -rl 目录名 |xargs sed -i "s/www.google.com/www.baidu.com/g"

但这个目录下如果有空格的文件就会出错于是改为

grep www.google.com -rl 目录名 |tr '\n' '\0'| xargs -0  sed -i "s/www.google.com/www.baidu.com/g"

解决思路就是,把每行的'\n'转换为'\0',再使用xargs的 -0选项

另外一种写法

sed -i "s/www.google.com/www.baidu.com/g" `grep www.google.com -rl 目录名 |tr '\n' '\0'`

注意 ` 不是单引号 注意 ` 不是单引号   注意 ` 不是单引号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值