0

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

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

请帮我。

4

3 回答 3

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
于 2013-09-30T10:34:53.850 回答
2

尝试双引号和花括号:

 sed -f <(sed -e "1,${VAR1}d; 12,\$d; x; s/.*/10a\\\\/;p; x" ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt
于 2013-09-30T10:34:13.263 回答
1

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

  1. 不能扩展的文本周围的单引号。(删除需要转义特殊字符。)
  2. 需要扩展的文本周围的双引号。

例如,您的案例如下所示:

sed -f <(sed -e '1,'"$VAR1"'d; 12,$d; x; s/.*/10a\\/;p; x' ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt
于 2013-09-30T10:59:24.603 回答