sedを使用してJavaプロジェクトからコメントを削除する方法は?

sedを使用してJavaプロジェクトからコメントを削除する方法は?

JavaDocコメントを持つJavaプロジェクトがあります。

/** ... */

その他の複数行コメント

/* ... */

行コメント

// ...

そして私自身の「説明コメント」

//* ...

コードを公開するときにすべての行コメントを削除したいのですが、他のコメントは削除したくありません。私はこれを行うためにsedを使用すると思いましたが、これまで成功していませんでした。私は以下を試しています:

#!/bin/bash

while read -d $'\0' findfile ; do
  echo "${findfile}"
  mv "${findfile}" "${findfile}".veryold
  cat "${findfile}".veryold | sed -e 's|//[^\*"]*[^"]*||' -e 's/[ ^I]*$//' | grep -A1 . | grep -v '^--$' > "${findfile}"
  rm -f "${findfile}".veryold
done < <(find "${1}" -type f -print0)

私は何が間違っていましたか? "..."の//はURLの一部である可能性があるため、削除しないでください。

重要な部分は

-e 's|//[^\*"]*[^"]*||'

ベストアンサー1

まず、スクリプトを1行に減らすことができます。

find "$1" -type f -name '*.java' -print -exec sed -i -e '...' '{}' \;

第二に、正規表現の構文は状況固有の感度をサポートしていないため、正規表現を使用して解決するのは難しい問題です。つまり、aが//文字列リテラル内にあるかどうかを知る方法はありません。

この事実を無視して、次のことを試すことができます。

s|//[^*"][^"]*$||

これは、コメントの一部として二重引用符を使用しないと仮定します。

おすすめ記事