如何用sed命令将File2中的指定文本替换为File1的内容?
问题分析与解决方案
你的原命令无效的核心原因是:你用/Hamburger/作为匹配条件,但File2.txt里根本没有包含'Hamburger'的行,sed完全不会触发后续的读取和删除操作,自然没有任何变化。
下面是几种可行的实现方法:
方法一:结合Shell变量与sed替换(最直观)
先把File1.txt的内容读取到Shell变量中,再用sed替换File2里的目标字符串:
# 读取File1内容到变量 burger=$(cat File1.txt) # 直接修改File2,将Pizza替换为变量内容 sed -i "s/Pizza/$burger/" File2.txt
注:如果File1.txt的内容包含sed特殊字符(如
/、&、\),需要先对变量内容进行转义,避免sed解析出错。
方法二:纯Sed命令实现(无需Shell变量)
通过匹配包含Pizza的行,先移除Pizza,再读取File1的内容插入到对应位置:
sed -e '/Pizza/{s/Pizza//; r File1.txt' -e '}' File2.txt > temp.txt && mv temp.txt File2.txt
解释:
/Pizza/:匹配包含目标字符串的行s/Pizza//:删除该行里的Pizzar File1.txt:读取File1的内容插入到当前行后面- 最后通过临时文件覆盖原File2(兼容不同系统的sed版本,避免
-i参数的差异)
方法三:简洁的命令替换写法
直接在sed的替换表达式中嵌入读取File1内容的命令:
sed -i "s/Pizza/$(cat File1.txt)/" File2.txt
这个写法和方法一本质相同,只是省去了中间变量,更简洁。
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

