カスタムスクリプトのsedと変数の置き換え

カスタムスクリプトのsedと変数の置き換え

さて、インターネット上の例を使用してカスタムスクリプトでsedを使用して置き換えるのに約12時間かかったので、ここで質問します。

ファイルaに複数の行がありますが、「=」の後の値を次のように変更したいと思います。

[Paths]
config=
data=
mupen64plus=
plugins=
roms=

[Plugins]
audio=
input=
rsp=
video=

置換後に結果に入力する必要がある値:文字通り「$ PWD」ではなく「$ PWD」変数の結果が必要です。

[Paths]
config="$PWD/Datos/config"
data="$PWD/Datos/config"
mupen64plus="$PWD/$EJECUTABLE"
plugins=./.libs/64Bits/plugin
roms="$PWD/Roms"

[Plugins]
audio=mupen64plus-audio-sdl
input=mupen64plus-input-sdl
rsp=mupen64plus-rsp-cxd4-sse2
video=mupen64plus-video-glide64mk2

なぜなら、私は次のことを試すのに時間がかかりすぎたからです。

sed -i "s|mupen64plus=.*\"|mupen64plus="$PWD/"$EJECUTABLE\"|g" "file.conf"

一部のコンテンツはアーカイブされません。

別のバリエーションは次のとおりです。

sed "s#^(mupen64plus=).*#\l ${"\/`pwd`"//#/\\#}#" "file.conf"

「無効な代替」または類似のコンテンツを表示

試してみましたがうまくいかないもう1つの方法は次のとおりです。

sed 's:#mupen64plus=:'`pwd`':' "file.conf"

これ:

sed -E "s/(data=).*/\1\.\/Datos\/\config/" "./file.conf"

次のように置き換えます。

data=./Datos/nfig

sed -E "s/(data=).*/\1\.\/Datos\/\c\/o\/nfig/" "./Datos/config/mupen64plus-qt.conf"
data=./Datos/oo/nfig

sed -E "s/(data=).*/\1\.\/Datos\\co\nfig/" "./Datos/config/mupen64plus-qt.conf"
data=./Datos/

さて、それともawkのような他のものを使用する方が簡単ですか?誰でも助けることができますか?

ベストアンサー1

スケルトン構成ファイルの使用

VAR1=/home/archemar
VAR2=some/lib
sed -e "/^mupen64plus/s:=.*$:=${VAR1}/${VAR2}:" \
    -e "/^config/s:=.*:=${VAR1}/DataOs/config:" config

どこ

  • 最初の2行は変数を初期化します。
  • -esedの編集コマンドの紹介
  • /^mupen64plus/^()パターンで始まる行に適用されます(ここでは固定文字列mupen64plus)。
  • s: : ::スラッシュの代わりに区切り文字として使用されるため、/エスケープは必要ありません。
  • =.*行の最後まで、=任意の文字(.)、任意の数字()を置き換えます(aはできるだけ一致するので重複します)。*$*
  • =${VAR1}/${VAR2}合計=${VAR1}/${VAR2}(実際の拡張はシェル(おそらくbash)を呼び出すことによって行われます。だから、一重引用符の代わりに二重引用符が必要です)

明らかにする

[Paths]
config=/home/archemar/DataOs/config
data=
mupen64plus=/home/archemar/some/lib
plugins=
roms=

[Plugins]
audio=
input=
rsp=
video=

内部バージョン(-i)を使用しないか、バックアップファイルを使用することをお勧めします。

sed -i .bak "/^mupen64plus/s:=.*$:=${VAR1}/${VAR2}:
    /^config/s:=.*:=${VAR1}/DataOs/config:" config

もう一つの方法はここのドキュメントです。

cat <<END-OF-FILE > config
[Paths]
config="$PWD/Datos/config"
data="$PWD/Datos/config"
mupen64plus="$PWD/$EJECUTABLE"
plugins=./.libs/64Bits/plugin
roms="$PWD/Roms"

[Plugins]
audio=mupen64plus-audio-sdl
input=mupen64plus-input-sdl
rsp=mupen64plus-rsp-cxd4-sse2
video=mupen64plus-video-glide64mk2
END-OF-FILE

これにより、すべての変数が拡張された構成ファイルが作成されます。

おすすめ記事