私は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
私が使用している場所4
は6
ダミー番号です。
このダミーの数字とコマンドを使用して式を再度確認してみましょう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
。
答え2
変数名の周りに中かっこを使用します。
sed -n "${var1},${var2}p" file1.txt > file2.txt
最初の変数の周りの中かっこは必須ではありませんが、一貫性を維持することをお勧めします。