我有两个不同的文件:
文件1
/home/user1/
/home/user2/bin
/home/user1/a/b/c
文件2
<TEXT1>
<TEXT2>
我想更换<TEXT1>
更换文件2与内容文件1使用sed
。我尝试了这个命令,但没有得到正确的输出:
cat File2|sed "s/<TEXT1>/$(cat File1|sed 's/\//\\\//g'|sed 's/$/\\n/g'|tr -d "\n")/g"
您也可以使用其他工具来解决此问题。
答案1
这是一个 sed 脚本解决方案(比尝试将其放入命令行上的一行更容易看):
/<TEXT1>/ {
r File1
d
}
运行它:
$ sed -f script.sed File2
/home/user1/
/home/user2/bin
/home/user1/a/b/c
<TEXT2>
答案2
我花了很长时间才找到使用 var 替换的解决方案。所有 sed 解决方案都不适合我,因为它们要么删除完整的行,要么错误地替换。
FILE2=$(<file2)
FILE1=$(<file1)
echo "${FILE2//TEXT1/$FILE1}"
将 file2 中所有出现的 TEXT1 替换为 file1 的内容。所有其他文本保持不变。
答案3
我回答是因为diff
/patch
方法在某些情况下可能会感兴趣。要定义文件中包含的行替换blob1
为blob2
use 中包含的行:
diff -u blob1 blob2 > patch-file
例如,如果blob1
包含:
hello
you
并blob2
包含:
be
welcome
here
生成的patch-file
将是:
--- blob1 2011-09-08 16:42:24.000000000 +0200
+++ blob2 2011-09-08 16:50:48.000000000 +0200
@@ -1,2 +1,3 @@
-hello
-you
+be
+welcome
+here
现在,您可以将此补丁应用到任何其他文件:
patch somefile patch-file
它将把hello
,you
行替换为be
, welcome
,here
中的行somefile
。