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

Bash 我想在shell脚本的sed-f命令中使用变量,bash,shell,sed,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 sed-f../log/file5.txt 问题不是10,而是使用变量VAR1(其中VAR1=10)。 $VAR1不起作用 我试过这个命令 sed -f <(sed -e '1,$VAR1

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

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

请帮帮我。

试试双qoutes和花括号:

 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../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
sed-f../log/file5.txt

首先,使用双引号。它将使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
sed-f../log/file5.txt

首先,使用双引号。它将使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
sed-f../log/file5.txt

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

  • 不能展开的文本周围的单引号。(不需要转义特殊字符。)
  • 在需要展开的文本周围加上双引号
  • 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
    
    sed-f../log/file5.txt
    
    我更喜欢单引号和双引号的组合:

  • 不能展开的文本周围的单引号。(不需要转义特殊字符。)
  • 在需要展开的文本周围加上双引号
  • 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
    
    sed-f../log/file5.txt
    
    大括号是个好主意,尽管问题出在单引号上。双引号确实可以扩展变量。@fedorqui需要大括号来分隔变量名和命令。Antigluk是对的-我忘记了双反斜杠的额外双转义(现在已更正)@Matthias哦,你是对的,否则它会像
    VAR1d
    variableColly大括号一样是个好主意,虽然问题是单引号。双引号确实可以扩展变量。@fedorqui需要大括号来分隔变量名和命令。Antigluk是对的-我忘记了双反斜杠的额外双转义(现在已更正)@Matthias哦,你是对的,否则在替换为双引号后,
    VAR1d
    variablea,显示此错误参见我的答案:避开反斜杠和美元替换为双引号后,显示此错误参见我的答案:避开反斜杠和美元