web-dev-qa-db-ja.com

sedを使用して構成ファイルの変数を置き換える方法

私はこの答えをオンラインで探していましたが、見つけられないようです。

次を含む構成ファイルがあります。

VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE5
VAR6=VALUE6

そして、VAR5の値をVALUE5からVALUE10に変更します。残念ながら、VALUE5の値がわからないため、検索できません。したがって、基本的には、VAR5の値を置き換える値に置き換えるために、sed(または何でも)を使用する必要があります。

26

このsedを試すことができます:

sed -i.bak 's/^\(VAR5=\).*/\1VALUE10/' file

それは与えます:

VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6
43
anubhava

答えは質問に追加されていますが。私はそれがどのように機能するかに少し時間を費やしました、私はいくつかの事実と答えの私のバージョンを追加したいです、

_sed -i 's,^\(THISISMYVARIABLE[ ]*=\).*,\1'THISISMYVALUE',g' config.cfg
_

説明:

  • _sed 's/find_this/replace_with/'_の基本として、検索および置換するsedと言っています。また、_/_の代わりに使用できる複数の他の区切り文字があることを覚えておいてください。ここでは_,_が使用されます。
  • ここで、^\(THISISMYVARIABLE[ ]*=\).*に一致する行を見つけます。これは、一致_THISISMYVARIABLE[ ]*=_をグループ化していることを意味します。 (_[ ]*_キーの後にスペースがある場合にカバーします)
  • 置換セクションでは_\1_は後方参照です。一致に使用した正規表現の最初のグループを参照しています。
4

あなたは言うことができます:

sed '/^VAR5=/s/=.*/=VALUE10/' filename

ファイルを変更するには、in-placeを使用し、-iオプション:

sed -i '/^VAR5=/s/=.*/=VALUE10/' filename
3
devnull
sed '/\(^VAR5=\).*/ s//\1VALUE10/' YourFile

AIX/KSHの下で

$ cat sample.txt
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE5
VAR6=VALUE6

$ sed '/\(^VAR5=\).*/ s//\1VALUE10/' sample.txt
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6

ファイル内の置換用

cat <> YourFile | sed '/\(^VAR5=\).*/ s//\1VALUE10/'

$ cat <> sample.txt | sed '/\(^VAR5=\).*/ s//\1VALUE10/'
$ cat sample.txt
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6

POSIX(sedではなくcat部分)準拠(sed --posix gnu sedで、非Linuxシステムでネイティブに伝統的なsed)

1
NeronLeVelu

以下をお試しください

sed -r 's/^(VAR5 =)。*/\ 1REPLACEMENT /'

VAR5の値はREPLACEMENTに置き換えられます。

0
Vlad.Bachurin