次のファイルがあるとします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 \*/