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 に答える