我有一个带有var LINK的模板 和一个数据文件links.txt,每行一个网址
如何在bash中我可以用link.txt的内容替换LINK?
如果我这样做
#!/bin/bash
LINKS=$(cat links.txt)
sed "s/LINKS/$LINK/g" template.xml
两个问题:
$ LINKS的内容为links.txt,不带换行符
sed:1:“s / LINKS / http:// test ...”:替换命令中的错误标志:'/'
sed没有在links.txt文件中转义//
感谢
答案 0 :(得分:2)
请使用更好的语言。我会为bash + awk编写一个解决方案......但这只是付出太多努力。 (如果你真的想这样做,请参见http://www.gnu.org/manual/gawk/gawk.html#Getline_002fVariable_002fFile)
只需使用您不需要混合控件和内容文本的任何语言。例如在python中:
#!/usr/bin/env python
links = open('links.txt').read()
template = open('template.xml').read()
print template.replace('LINKS', links)
注意你是否试图用其他分隔符强制sed解决方案 - 你会遇到同样的问题,除非你在网址中发现不允许的东西(但你是否在验证?)如果你没有,你已经有另一个问题 - 链接可以包含<
和>
并打破你的xml。
答案 1 :(得分:1)
您可以使用ed
:
ed template.xml <<EOF
/LINKS/d
.r links.txt
w output.txt
EOF
答案 2 :(得分:0)
尝试两次运行sed
。首次运行时,将/
替换为\/
。第二轮将与您目前的相同。
答案 3 :(得分:0)
sed命令中's'后面的字符会结束分隔符,因此您需要使用$LINK
值中不存在的字符。例如,您可以尝试使用逗号:
sed "s,LINKS,${LINK}\n,g" template.xml
请注意,我还添加了\n
以添加其他换行符。
另一种选择是在$ LINK中转义正斜杠,可能使用sed。如果您对$ LINK中的字符没有保证,这可能会更安全。