パターンブロックの各行をEOLに置き換える

パターンブロックの各行をEOLに置き換える

次のテキストファイルがあります。

ここで、$はEOL(行末)の位置を表し、それを説明するために使用されます。

 53t83t5  5 gejgi3 gg 4gij503 $

      /* rtdrfsetsrhs               $
ryhrdhrh               $
rhyrdhyyyyyyyyyyyrhyrshrh$
ryhrhrh */$
$
345dfeb terfgb$
/*srdtfgyhgfs*/           $
$
$

/* */これで、このブロックの各行を次のように行の先頭にあるEOLに置き換える必要があります。 $の場所を参照してください。3号線/*これは、スペースを含む文字がある場合はスキップせず、スラッシュの代わりにEOLを入力する必要があることを意味します。

 53t83t5  5 gejgi3 gg 4gij503 $

      $
$
$
$
$
345dfeb terfgb$
/*srdtfgyhgfs*/           $
$
$

ブロック全体を削除してブロックを検出できますが、sed '/\/\*/,/\*\//d inputFile.sedスクリプトでsedコマンドを使用して上記の操作を実行できるかどうかを知りたいです。

メモ: /*...*/これは、パターンブロックを記述するために使用され、例えば、他のパターンを含むブロックを有することもできる。あるいは<--...-->!!...!!作品を知りたいのですが、/*...*/他のすべてを自分で処理できます。

ベストアンサー1

予想される出力から少なくとも1つの改行文字を含むブロックから改行文字を除くすべての文字を削除したいようです。

したがって、以下を使用できますperl

perl -0777 -pe '
  s{/\* .*? \*/ | <-- .*? --> | !! .*? !!}{
    $& =~ /\n/ ? $& =~ s/[^\n]//gr : $&
  }gsex' < your-file

おすすめ記事