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|//[^*"][^"]*$||
これは、コメントの一部として二重引用符を使用しないと仮定します。