在 sed 命令中使用变量

在 sed 命令中使用变量

我正在使用此命令将某一行从一个文件复制到另一个文件。它运行良好。没有问题。

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

相关内容