我想在shell脚本中使用sed -f命令中的变量

时间:2013-09-30 10:28:42

标签: bash shell 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

请帮帮我。

3 个答案:

答案 0 :(得分:3)

首先,使用双引号。它将使BASH能够处理字符串。

接下来,转义反斜杠(甚至那些应该是sed转义符号的反斜杠) - 因为bash也会逃脱它们。

我想它应该是

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

答案 1 :(得分:2)

尝试双引号和花括号:

答案 2 :(得分:1)

我更喜欢单一和混合的混合双引号:

  1. 文字周围的单引号,不得展开。 (删除需要转义特殊字符。)
  2. 需要扩展文本的双引号。
  3. e.g。你的情况如下:

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