sed
文字列+改行文字+左中括弧を一致させるには。をお試しください。
sub feature_get_web_php_mode
{
my ($d) = @_;
my $server = &find_domain_server($d);
こうなる
sub feature_get_web_php_mode
{
return 'fcgid';
my ($d) = @_;
my $server = &find_domain_server($d);
私の式の正規表現は次のとおりです。s|sub feature_get_web_php_mode\n{|CHANGE_CODE|
しかし、うまくいきません。
開かれた中かっこが最初に一致しない理由を見つけようとしましたが、手がかりはありません。
よろしくお願いします。
ベストアンサー1
開かれた中かっこが最初に一致しない理由を見つけようとしましたが、手がかりはありません。
デフォルトではsed
一度に1行ずつ機能するため、読み取った行を含めることはできません\n
。 GNUを使用しているので、sed
ifはNUL()文字で区切られたテキストブロック-z
で作業するためのオプションを提供します。\0
コマンドを変更するために必要な唯一のことは、次の-z
オプションを追加することです。
sed -z "s|sub feature_get_web_php_mode\n{\n|&return 'fcgid';\n|"
入力ファイルにNUL文字がないと予想されるため(通常のテキストファイルのように見える)、処理できるようにメモリに完全にロードされますsed
(プログラム文書なので無害になる可能性があります)。 )。
ファイルが大きすぎる場合は、次の代替バージョンを試してください。
sed "/^sub feature_get_web_php_mode\$/ { N; s|\n{|&\nreturn 'fcgid';|; }"
ちなみに、次のバージョンはPosixと厳密に互換性があります。
sed "/^sub feature_get_web_php_mode\$/ { N; s|\n{|&\\
return 'fcgid';|; }"