sed -e "s/Var4/r {replace.txt} /g" "input.txt" > "output.txt"
Var4:
占位符将被替换
replace.txt
包含可变数据
input.txt:
输入文件
output.txt
输出文件
在“ input.txt”中出现的每个“ Var4”都应替换为“ replace.txt”中的变量行,但sed会将“ replace.txt”读取为普通文本,而不是文件名:
不正确: TextBox1.Value =“ r replace.txt”
正确: TextBox1.Value =“ 0000AAAA”
我厌倦了在所有类似的帖子中搜索正确的语法,但是没有用!!
谢谢
Input.txt
TextBox1.Value = "Var4"
Else
TextBox1.Value = "- - - - - - -"
End If
TextBox1.Value = "Var4"
Else
TextBox1.Value = "- - - - - - -"
End If
Output.txt应该如下所示:
TextBox1.Value = "0000AAAA"
Else
TextBox1.Value = "- - - - - - -"
End If
TextBox1.Value = "0000BBBB"
Else
TextBox1.Value = "- - - - - - -"
End If
Replace.txt
0000AAAA
0000BBBB
0000CCCC
我也尝试过
sed -e "s/Var4/$(<replace.txt sed -e 's/[\&/]/\\&/g' -e 's/$/\\n/' | tr -d '\n')/g" "input.txt" > "output.txt"
但是输出仍然不正确:
TextBox1.Value = "0000AAAA
0000BBBB
0000CCCC
"
Else
TextBox1.Value = "- - - - - - -"
End If
TextBox1.Value = "0000AAAA
0000BBBB
0000CCCC
"
Else
TextBox1.Value = "- - - - - - -"
End If
更新1:
sed '/Var4/R replace.txt' input.txt | sed '/Var4/{N;s/"Var4"\n\(.*\)/"\1"/}' > "output.txt"
如果“ Var4”位于该行的末尾,则效果很好,但是,如果后面有任何文本,则输出不正确?
Input.txt
TextBox1.Value = "Var4" Then
Else
TextBox1.Value = "- - - - - - -"
End If
TextBox1.Value = "Var4" Then
Else
TextBox1.Value = "- - - - - - -"
End If
Output.txt应该如下所示:
TextBox1.Value = "0000AAAA" Then
Else
TextBox1.Value = "- - - - - - -"
End If
TextBox1.Value = "0000BBBB" Then
Else
TextBox1.Value = "- - - - - - -"
End If
Replace.txt
0000AAAA
0000BBBB
0000CCCC
使用后的Output.txt:
sed '/Var4/R replace.txt' input.txt | sed '/Var4/{N;s/"Var4"\n\(.*\)/"\1"/}' > "output.txt"
TextBox1.Value = "Var4" Then
0000AAAA
Else
TextBox1.Value = "- - - - - - -"
End If
TextBox1.Value = "Var4" Then
0000BBBB
Else
TextBox1.Value = "- - - - - - -"
End If
有什么建议吗?
答案 0 :(得分:2)
这可能对您有用(GNU sed):
true
在占位符之后附加替换行,然后在单独的sed调用中,在占位符之后附加该行,并使用替换命令来实现所需的结果。
sed '/Var4/R replaceFile' file | sed '/Var4/{N;s/"Var4"\(.*\)\n\(.*\)/"\2"\1/}'
命令一次只能读取一行文件,而R
命令每次都读取整个文件。
答案 1 :(得分:0)
sed
的{{1}}命令只能将文件内容输出到stdout。您无法在模式空间中获得该内容,也无法将该内容注入另一个r
命令(如您的问题中的命令)。
只需使用shell即可实现。这是一个使用Bourne shell的解决方案,因为我不了解Windows:
sed
在这里,我假设sed -e "s/Var4/$(cat replace.txt)/g" "input.txt" > "output.txt"
的内容与您的示例(0000AAAA)类似,并且不包含任何“ /”,否则请在replace.txt
命令中选择除“ /”之外的其他分隔符。
答案 2 :(得分:0)
sed '/Var4/R replace.txt' input.txt | sed '/Var4/{N;s/"Var4"\n\(.*\)/"\1"/}' > "output.txt"
感谢https://stackoverflow.com/users/967492/potong>可以在GNU bash上使用!