我的文件file.txt
包含以下内容:Hi {YOU}, it's {ME}
我想像这样动态创建一个新文件file1.txt
YOU=John
ME=Leonardo
cat ./file.txt | sed 'SED_COMMAND_HERE' > file1.txt
哪些内容为:Hi John, it's Leonardo
我到目前为止尝试的sed命令就像这个s#{\([A-Z]*\)}#'"$\1"'#g
但是“替换”部分无法正常工作,它打印出Hi $YOU, it's $ME
答案 0 :(得分:1)
您可以将awk与2个文件一起使用。
$> cat file.txt
Hi {YOU}, it's {ME}
$> cat repl.txt
YOU=John
ME=Leonardo
$> awk -F= 'FNR==NR{a["{" $1 "}"]=$2; next} {for (i in a) gsub(i,a[i])}1' repl.txt file.txt
Hi John, it's Leonardo
awk
命令会检索替换文件,并将每个键值存储在数组a
中,并将{
和}
包裹起来。<强>更新强>
要在不创建repl.txt的情况下执行此操作,您可以使用`process substitution **:
awk -F= 'FNR==NR{a["{" $1 "}"]=$2; next} {
for (i in a) gsub(i,a[i])} 1' <(( set -o posix ; set ) | grep -E '^(YOU|ME)=') file.txt
答案 1 :(得分:1)
sed
实用程序可以对每个输入行执行多项操作:
$ sed -e "s/{YOU}/$YOU/" -e "s/{ME}/$ME/" inputfile.txt >outputfile.txt
这假设{YOU}
和{ME}
在线上只出现一次,否则,只需添加g
("s/{YOU}/$YOU/g"
等。)