SED正規表現はEOFと一致し、置換/挿入します。

SED正規表現はEOFと一致し、置換/挿入します。

次のコマンドを使用してアンカー(正規表現パターン)を正常に見つけ、それをファイル(ファイルパス)内のパラメータ値に置き換えました。

sed -i $"/$ANCHOR/i \\$PARAMVALSEDINS" "$FILEPATH"

私にとって必要なのは、私のアンカーが「」(空)のときに私のEOFを一致させ、そこで交換を実行することです。

だから私は次のことを想像しています。

ANCHOR = ''の場合はANCHOR = '$ EOF'なので、SEDは正常にEOFを見つけて交換を進めます。

これは可能ですか?これ以外には具体的な内容が見つかりません。

sed -i -e "\$aPARAMVALSEDINS" "$FILEPATH"

ただし、これにはANCHOR変数は含まれません。私の質問に答えることができない場合は、これを実装します。

PS。もちろん、まったく異なるアプローチを使用することもできます。正規表現マッチングと正規表現領域内のEOFマッチングに役立つ他のコマンドを使用してこれを行う方法はありますか?たとえば、$ANCHOR が EOF と一致する別の -i $"/$ANCHOR/i \$PARAMVALSEDINS" "$FILEPATH"

ありがとう

答え1

[[ -z $ANCHOR ]] && ANCHOR='$' || ANCHOR="/$ANCHOR/"
sed -i "${ANCHOR}i \\$PARAMVALSEDINS" "$FILEPATH"

答え2

$ ANCHOR=${ANCHOR:+"/$(printf '%s\n' "$ANCHOR" | sed -e 's:[][\/.^$*]:\\&:g')/"}

$ sed -i  -e "${ANCHOR:-\$}i \\$PARAMVALSEDINS" "$FILEPATH"

最初のステップは、アンカー変数の内容をエスケープして、sedで強く使用して角かっこ内の式と一致させることです。

次のステップでアンカー変数が空の場合は、その場所にリテラル$記号を使用します。その後、sedはそれをEOFとして解釈します。

HTH。

注:paramvalsedins varを使用する前にエスケープされていることを確認してください。

関連情報