1

現在、生成した新しい値を置き換えるための bash スクリプトを作成しようとしています。

これらの値は次の場所に格納されていましたconstants.php:

-----------constant.php : start-------------------
                      :
        define('PASS1', 'ABCD');
        define('PASS2', '1234');
                      :
-----------constant.php : end---------------------

スクリプトを実行した後、( を使用してsed)PASS1と の値をPASS 2個別に更新する必要があります。

-----------constant.php : start-------------------
                      :
        define('PASS1', 'WXYZ');
        define('PASS2', '0987');
                      :
-----------constant.php : end---------------------

たとえば、キーを見つけて'PASS1'コンマの後の値を置き換える方法はありますか?

4

2 に答える 2

3

次の置換を含む任意の行に一致するsedよう に出現を指定できます。sed "/PASS1/s/'[^']*'/'WXYZ'/2"PASS1s/'[^']*'/'WXYZ'/2

s/     # Substitute  
'      # Match a single quote
[^']*  # Match anything not a single quote 
'      # Match the closing single quote 
/      # Replace with 
'WXYZ' # The literal value
/2     # The 2 here matches the second quoted string, not the first.  

# First key 
$ sed "/PASS1/s/'[^']*'/'WXYZ'/2" file

        define('PASS1', 'WXYZ');
        define('PASS2', '1234');

# Second key
$ sed "/PASS2/s/'[^']*'/'0978'/2" file

        define('PASS1', 'ABCD');
        define('PASS2', '0978');

# In one go
$ sed "/PASS1/s/'[^']*'/'WXYZ'/2;/PASS2/s/'[^']*'/'0978'/2" file

        define('PASS1', 'WXYZ');
        define('PASS2', '0978');
于 2013-01-17T11:49:42.570 に答える
0

次のような置換ルールが必要です。

/'PASS1'/ s/, *'[^']*'/, 'WXYZ'/

引用符で囲まれた PASS1 を含む行を見つけ、次の引数を正しいパスワードに置き換えます。このようなルールを作成するのは面倒でエラーが発生しやすいため、sed にルールを作成してもらうことを好みます。したがって、ファイルに次のものkey-value.txtが含まれている場合:

PASS1 WXYZ
PASS2 0987

以下を使用して置換ルールを生成できます。

<key-value.txt sed "s:\(.*\) \(.*\):/\1/ s/, *'[^']*'/, '\2'/:"

出力:

/'PASS1'/ s/, *'[^']*'/, 'WXYZ'/
/'PASS2'/ s/, *'[^']*'/, '0987'/

これを 2 番目の sed にパイプして、実際の置換を行います。

<key-value.txt sed "s:\(.*\) \(.*\):/\1/ s/, *'[^']*'/, '\2'/:" | sed -f - constants.php

2 番目の sed でスイッチを使用して、-iconstants.php を「インプレース」に変更します。

于 2013-01-17T11:25:41.837 に答える