パラメータがネストされたパターンを識別する方法

パラメータがネストされたパターンを識別する方法

いくつかのテキストでパターン(ネストされたパラメータを含む)を囲むためにsedで使用されるいくつかの正規表現を見つけようとしています。

基本的な例は次のとおりです。

length(bill_cycle)

正規表現は以下を提供しなければなりません。

length(cast(bill_cycle as string))

ここでは、で始まるものを検索し、関連するエンディングをlength(探します。その後、真ん中のコンテンツ)length(bill_cyclecast(bill_cycle as string)

変数(この場合some(somethiing))に次のネストされたパラメータがありますが、

length(some(somethiing))

正規表現は以下を提供しなければなりません。

length(cast(some(somethiing) as string))

私はUNIXスクリプトや動作する他のコマンドで開いています。どんな助けでも大変感謝します。

ベストアンサー1

Perlが救出に来る!

perl -MText::Balanced=extract_bracketed \
     -ne 'if (/length(\(.*)/) {
              ($arg) = (extract_bracketed(($1 =~ /\((.*)\)/)[0]))[1];
              print "length(cast($arg as string))\n";
          } else { print }' -- input.file > output.file

コアモジュールを使用してください。テキスト::バランス文字列からバランス区切り文字を含む部分文字列を抽出します。

おすすめ記事