変数sedを使いたいです。
たとえば、sed -n '1,10p' file
。したがって、代わりにkを整数位置として10
使用したいと思います。$k
答え1
背景
sed
シェルまたは環境変数を拡張できません。代わりに、Bashシェルを拡張できるようにする引用符を選択する必要があります。 Bashは二重引用符で囲まれている場合は変数を拡張しますが、単一引用符で囲まれている場合は拡張しません。一重引用符を使用するには、次の手順を実行する必要があります。
$ sed -n '1,'$k'p' file
気づく:上記では、変数をパブリックに設定して、渡され$k
たパラメータの引用符内に変数が含まれないようにしましたsed
。これにより、シェル Bash は$k
設定された値に拡張されます。
二重引用符を使用している場合は、シンボルを使用して${var}
二重引用符内の変数を保護することで、シェルが変数を拡張できます。次の${k}
表記法が必要です。それ以外の場合は、変数名$k
の後にが表示され、p
Bashシェルが変数名をとして認識するためです$kp
。
$ sed -n "1,${k}p" file
変数$k
とに渡すこともできますp
。これは、sed構文がアドレスとコマンドの間にスペースを許可するために機能します(つまり、sedとは異なり、この形式ではスペースはsedに渡されます${k}
)。
$ sed -n "1,$k p" file
メモ:$k
次のメソッドは設定しないと失敗しますので、注意して使用してください。
$ printf "blah %d\n" $(seq 10) | sed -n '1,'$k'p'
sed: -e expression #1, char 3: unexpected `,'
はい
以下は${k}
二重引用符のバリエーションの例です。
$ k="3"; printf "blah %d\n" $(seq 10) | sed -n "1,${k}p"
blah 1
blah 2
blah 3
シェルと環境変数
このトピックの詳細については、次のU&L Q&Aをお読みください。シェル変数と環境変数の使い方の違いは何ですか?。