SEDはどのように変数を効率的に表現しますか?

SEDはどのように変数を効率的に表現しますか?

算術的なものを表現する方法には、新しいものや古いものなど、さまざまな方法があります。しかし、私はこの記事を効率的でよく使いたいです。

sed -n '$START,$ENDp;$ENDq' < data.tex

どの出力

sed: 1: "$START,$ENDp;$ENDq": invalid command code S

総コード

#!/bin/bash
function getStart {
        local START="$(awk '/begin\{document\}/{ print NR; exit }' data.tex)"
        echo $START
}

function getEnd {
        local END="$(awk '/end\{document\}/{ print NR; exit }' data.tex)"
        echo $END
}

START=$(getStart)
(( START-- ))
echo $START

END=$(getEnd)
(( END++ ))
echo $END

sed -n '$START,$ENDp;$ENDq' < data.tex

ここで、SEDは関数のローカル変数から行番号を取得します。 SEDの変数を効率的に表現することで、最初の行をどのように表現できますか?

答え1

変数は一重引用符で拡張されません。二重引用符を使用してください。

sed -n "$START,${END}p;${END}q" < data.tex

また、値の後にENDの値以外の文字が来たいので、変数名の終わりの場所を表示する必要があります。構文を使用して、変数名が終わる場所を明確にすることができます。pENDp${END}

$ STARTまたは$ ENDが数字ではなく正規表現の場合は、一部の文字をエスケープする必要があります。

関連情報