複数のキーワード/パターンの一致後に行の部分文字列を置き換える方法

複数のキーワード/パターンの一致後に行の部分文字列を置き換える方法

何千ものファイルを見つけて見つけなければなりません。

# disabledRule:

この行では、andにfileinto続くfileinto_copy一連のキーワードを見つける必要があります。例:createtarget

{s:4:"type";s:8:"fileinto";s:6:"create";b:0;s:6:"target";s:5:"PATTERN";}
{s:4:"type";s:13:"fileinto_copy";s:6:"create";b:0;s:6:"target";s:5:"PATTERN";}

このキーワードの後に​​PATTERNを修正して.ください/

PATTERN にはほぼすべての文字を含めることができます。例えば

simple.folder.structure
more.complex.[department_1] @employee-XY

セクションはキーワードによって多少異なる場合があり、「キーワード+パターン」パターン全体が1行に複数回表示されることがあります。

これは簡単なようですが、大きなスクリプトを書いて行を分離せずにsed動作させる方法を見つけることができませんでした。awk私はsed物を交換してパターンを見つけるのにかなり上手だと思いますが、置換をパターンに限定する方法がわかりません。

長いスクリプトを書かずにこれを行う方法についての提案はありますか?sedキャプチャグループを処理する方法はありますか?

アップデート:あなたがいくつか見つけたかもしれないように、移行のためにファイルを修正する必要があります。私たちは新しいソフトウェアが完全に互換性がないことを知っていますが、新しいソフトウェアは上記の「#disabledRule」行をまったく認識しないことがわかりました。したがって、これらの観点から問題を解決することはできません。

答え1

はい、さまざまなアドレスを使用できますが、特定のセクションがいつ終了するかはsedわかりません。# disabledRule:たとえば、次の空行で終わり、与えられた行に線パターンの外側に他の点がない場合は、filecopy非常に簡単です。

sed '/^# disabledRule:$/,/^$/s_\._/_g'

しかし、この場合はおそらく尋ねません。キーワードに対して追加のフィルタリングが実行されます。

sed '/^# disabledRule:$/,/^$/{/"fileinto\(_copy\)*".*"create".*"target"/s_\._/_g;}'

それでも要件が満たされない場合は、さらに修正するか、できるだけ長いファイルの例を提供して詳細を説明してください。

関連情報