我正在使用此命令将某一行从一个文件复制到另一个文件。它运行良好。没有问题。
sed -f <(sed -e '1,10d; 12,$d; x; s/.*/10a\/;p; x' ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt
问题是,我不想使用 10,而是想使用变量 VAR1(其中 var1=10)。$VAR1 不起作用。
我尝试了这个命令:
sed -f <(sed -e '1,$VAR1d; 12,$d; x; s/.*/10a\/;p; x' ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt
请帮我。
答案1
shell 不会扩展单引号内的变量。您需要使用双引号。此外,正如 Danatela 所说,在这种情况下您还需要大括号。由于 shell 随后也会尝试扩展$d
,因此您需要转义$
。
sed -f <(sed -e "1,${VAR1}d; 12,\$d; x; s/.*/10a\/;p; x" ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt
由于您现在使用双引号(例如?),我不确定引号中是否还有其他部分也需要转义,*
因此您始终可以在双引号和单引号之间切换,仅在必要时使用前者。
sed -f <(sed -e '1,'"${VAR1}"'d; 12,$d; x; s/.*/10a\/;p; x' ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt
答案2
您应该使用花括号括住变量名:
sed -f <(sed -e '1,${VAR1}d; 12,$d; x; s/.*/10a/;p; x' ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt
因此$
将评估VAR1
而不是VAR1d
。