sed変数とシェル変数を使用してあるファイルから別のファイルに行をコピーする

sed変数とシェル変数を使用してあるファイルから別のファイルに行をコピーする

私はsedといくつかのシェル変数を使ってあるファイルから別のファイルの終わりに行をコピーする方法を見つけようとしました。

sed -n "$var1,$var2'p'" file1.txt > file2.txt

私はこれに似たバリエーションをたくさん試しましたが、葉巻はありません。誰かが私に正しい構文を教えてもらえますか?ありがとうございます。

編集する

そのため、以下の提案を試しましたが、今このエラーが発生します。

sed: -e expression #1, char 2: invalid usage of line address 0
sed: -e expression #1, char 2: unknown command: `*'"

編集する

いいですね。これらの提案が役に立ちました。別の問題が見つかりましたが、スクリプトは完全に実行されます。とても感謝しています!

ベストアンサー1

フレディの答え有効ですが説明が足りない。おそらく希望の形式sedは次のとおりです。

sed -n 4,6p file1.txt

私が使用している場所46ダミー番号です。

このダミーの数字とコマンドを使用して式を再度確認してみましょうecho

$ var1=4
$ var2=6
$ echo "$var1,$var2'p'"
4,6'p'

's を s で囲んだので、文字通り"解釈され、'sed コマンドでは文字通り s があります。したがって、コマンドを実行しようとすると、次のようになります。

$ sed -n "$var1,$var2'p'" file1.txt
sed: -e expression #1, char 4: unknown command: `''

解決策

'式からsを削除できますが、これにより変数名が$var2pに変わります。したがって、Freddyが提案したように、{…}変数名に明示的な括弧を使用できます。つまり

sed -n "${var1},${var2}p" file1.txt

コマンドの前にechoを追加して、これが機能しているかどうかをテストできます。別の形式は

sed -n "$var1,$var2"p file1.txt

しかし、私の考えには読みやすさが落ちると思います。

ついにスチールドライバーで指摘、ファイルに追加する場合は、>> file2.txt代わりにを使用してください> file2.txt

おすすめ記事