我有两个不同的文件:
/home/user1/
/home/user2/bin
/home/user1/a/b/c
Run Code Online (Sandbox Code Playgroud)
<TEXT1>
<TEXT2>
Run Code Online (Sandbox Code Playgroud)
我想替换<TEXT1>的文件2与内容文件1使用sed。我试过这个命令,但没有得到正确的输出:
cat File2|sed "s/<TEXT1>/$(cat File1|sed 's/\//\\\//g'|sed 's/$/\\n/g'|tr -d "\n")/g"
Run Code Online (Sandbox Code Playgroud)
您也可以使用其他工具来解决此问题。
Kus*_*nda 24
这是一个 sed 脚本解决方案(比尝试在命令行上将其放入一行更容易):
/<TEXT1>/ {
r File1
d
}
Run Code Online (Sandbox Code Playgroud)
运行它:
$ sed -f script.sed File2
/home/user1/
/home/user2/bin
/home/user1/a/b/c
<TEXT2>
Run Code Online (Sandbox Code Playgroud)
mar*_*756 10
我花了很长时间才找到使用 var 替换的解决方案。所有 sed 解决方案对我都不起作用,因为它们要么删除完整的行,要么不正确地替换。
FILE2=$(<file2)
FILE1=$(<file1)
echo "${FILE2//TEXT1/$FILE1}"
Run Code Online (Sandbox Code Playgroud)
将 file2 中所有出现的 TEXT1 替换为 file1 的内容。所有其他文本保持不变。
我回答是因为diff/patch方法在某些情况下可能很有趣。定义包含在文件中的行的置换blob1由包含在线路blob2使用:
diff -u blob1 blob2 > patch-file
Run Code Online (Sandbox Code Playgroud)
例如,如果blob1包含:
hello
you
Run Code Online (Sandbox Code Playgroud)
并blob2包含:
be
welcome
here
Run Code Online (Sandbox Code Playgroud)
生成的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
Run Code Online (Sandbox Code Playgroud)
现在,您可以将此补丁应用于任何其他文件:
patch somefile patch-file
Run Code Online (Sandbox Code Playgroud)
它将替换hello,you行be, welcome,here行somefile。
| 归档时间: |
|
| 查看次数: |
27825 次 |
| 最近记录: |