Ubuntu 14の変数ワードのSed正規表現

Ubuntu 14の変数ワードのSed正規表現

次の文字列を含むファイルが提供されます。

fastcgi_param WP_ENV staging;

「staging」という単語を新しい文字列に置き換えるには、sed式が必要です。

fastcgi_param WP_ENV production;

最初の例では、3番目の単語は変更可能です。開発、ローカルなどの小文字の文字列にすることができます。

私は以下を試しました:

sed  's/fastcgi_param WP_ENV [\w+]/fastcgi_param WP_ENV production/g' 

しかし、それをうまくやっていません。この単語の正規表現が一致しません。

これらの置換を実行する正しいsedコマンドは何ですか?

答え1

-E角かっこの追加と削除:

$ sed -E 's/fastcgi_param WP_ENV \w+/fastcgi_param WP_ENV production/g' file
fastcgi_param WP_ENV production;

メモ:

  1. +デフォルトの正規表現はサポートされていません。 -E拡張正規表現のサポートを有効にします+

  2. \w+1 つ以上の単語文字と一致します。[\w+]、またはいずれかと一致します。\w+

  3. \w持ち運びが簡単ではありません。 POSIX 互換性のためには、以下を使用してください。

    $ sed -E 's/fastcgi_param WP_ENV [[:alnum:]]+/fastcgi_param WP_ENV production/g' file
    fastcgi_param WP_ENV production;
    
  4. 行を2回入力したくない場合は、キャプチャグループを使用できます。

    $ sed -E 's/(fastcgi_param WP_ENV) [[:alnum:]]+/\1 production/g' file
    fastcgi_param WP_ENV production;
    

答え2

する:

sed -E 's/^(([^[:blank:]]+[[:blank:]]+){2})[[:lower:]]+(.*)/\1production\3/'
  • ^(([^[:blank:]]+[[:blank:]]+){2})最初の2つの単語を一致させ、キャプチャされたグループに入れて、交換時にグループを参照できます。

  • [[:lower:]]+1 つ以上の小文字の一致

  • (.*)行の残りの部分を一致させて、キャプチャグループに配置します。

  • 置換では、キャプチャされたグループ1(末尾のスペースを含む最初の2つの単語)と3(置き換える小文字の次の部分)を保持します。その間に必要な代替文字列が提供されます。

例:

% sed -E 's/^(([^[:blank:]]+[[:blank:]]+){2})[[:lower:]]+(.*)/\1production\3/' <<<'fastcgi_param WP_ENV staging;'
fastcgi_param WP_ENV production;

関連情報