2011-12-22 24 views
0

私はPHPファイルで置き換えを行っています。私はsedで言語変数を変更する必要があります。ここに私のWORKINGコード:正規表現はsedで置き換えます

sed -i '' -e "s/\$config\['language'\] = \"english\";/\$config['language'] = '$LANGUAGE';/" Sources/$APP/application/config/config.php 

これは、任意の言語設定と一致するように動作していない:

sed -i '' -e "s/\$config\['language'\] = \"*\";/\$config['language'] = '$LANGUAGE';/" Sources/$APP/application/config/config.php 

間違っているのですか? sed

+3

'*'の代わりに '。*' ...? – BRFennPocock

答えて

1

、アスタリスク(*)文字は、「以前のもの0回以上繰り返します。」を意味しますこれは、シェルに展開されるシェルとは対照的です。やりたいこと突き出すあるので、のような右のアスタリスクの前に、(「何を」という意味).:その後、(任意の文字(.)任意の回数繰り返す」あなたのプログラムを教えてくれます

sed -i '' -e "s/\$config\['language'\] = \".*\";/\$config['language'] = '$LANGUAGE';/" Sources/$APP/application/config/config.php 

*)」。

1

これは、*があなたの考え方を行わないためです。 sed正規表現では、すべての正規表現と同様に、.*?を使用して、文字のコレクション(改行を除く)を意味します。これは、.は何も一度と一致することを意味し、*は前の項目と何度もマッチすることを意味します。 ?は、貪欲ではないため、残りの式が一致する限り、可能な限り少ない文字数に一致します。私はあなたが入力したものがわからないので、あなたが疑問符を必要とするかどうかを知ることはできません。

1

式の*.*に置き換える必要があります。 *は「前の項目のインスタンスが0以上」(この場合は")ですので、最初に.(任意の文字)に一致させ、0以上のインスタンスがの場合はとしたいとします。

関連する問題