sedを使用してJavaファイルの複数行コメントを1行コメントに置き換える方法は?

sedを使用してJavaファイルの複数行コメントを1行コメントに置き換える方法は?

次のファイルがあるとしますTest.java

import java.io.*;

/* test comment */
public class Test { /* another test comment */
    ...
    ...
    ...
}

Javaプログラムには、1行の//コメントと複数行の/* ... */コメントを含めることができます。私が達成したいのは、/* ... */1行を占めるコメントを見つけてコメントに置き換えることです。したがって、交換後は次のようにする必要があります。Test.java//Test.java

import java.io.*;

// test comment
public class Test { // another test comment
    ...
    ...
    ...
}

私はsed次のようにしてこれをやろうとしています。

sed -ri 's//\* ([.]*[ ]*) \*//// \1/' Test.java

しかし、これは何も変わらないようです。もしそうなら、残りの行はそのまま維持しながら、どのようにコメントを変更できるのか疑問に思います。この動作を実装する方法がわかりません。私の正規表現が何とかオフになっていると思いますが、その理由を完全にはわかりません。どんなフィードバックや提案にも感謝します。

答え1

これを行うことができます:

sed 's_/\*\(.*\)\*/_//\1_' <Test.java

仕組みは次のとおりです。

  • 文字を_外す必要がないように区切り記号として使用します。/
  • /\*'/*' 一致 (エスケープ済み *)
  • \(上記を使ったことを覚えています。\)
  • それから「//」(エスケープする必要はありません)と覚えているものに置き換えてください。\1

要件を満たしていることが確認されたら、以下を追加して-i削除します <

sed -i 's_/\*\(.*\)\*/_//\1_' Test.java

答え2

2番目のポイントは次のとおりです。

'/*' is matched with /\* (escaping the *) and '*/' is matched with \*/

関連情報