在 `sed` 命令中使用变量

May*_*ant 7 command-line scripts

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

sed -f <(sed -e '1,10d; 12,$d; x; s/.*/10a\/;p; x' ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt
Run Code Online (Sandbox Code Playgroud)

问题不是 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
Run Code Online (Sandbox Code Playgroud)

请帮我。

Spa*_*awk 7

shell 不会在单引号内扩展变量。您需要使用双引号。此外,正如 Danatela 所说,在这种情况下您还需要大括号。由于外壳随后也会尝试扩展$d,因此您需要转义$.

sed -f <(sed -e "1,${VAR1}d; 12,\$d; x; s/.*/10a\/;p; x" ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt
Run Code Online (Sandbox Code Playgroud)

我不确定引号中是否还有其他部分也需要转义,因为您现在使用双引号(例如*?),因此您始终可以在双引号和单引号之间切换,仅在必要时使用前者。

sed -f <(sed -e '1,'"${VAR1}"'d; 12,$d; x; s/.*/10a\/;p; x' ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt
Run Code Online (Sandbox Code Playgroud)