ファイルからパターンに一致するすべての関数文書を削除します。

ファイルからパターンに一致するすべての関数文書を削除します。

次のように自動的に生成された文書を含むいくつかの関数があるとします。

/**
  * @author John Doe
  */

ファイルにこのように書き込まれたすべての関数からこの3行を簡単に削除する方法はありますか?この問題の面倒なことは、単にファイル全体を1行ずつ処理するのではなく、いくつかのコンテキストを調べる必要があることです。

答え1

そしてperl

perl -0777 -i -pe 's{^/\*\*\n  \* @author.*\n  \*/\n}{}gm' the-file

これらのコメントのインデントレベルが異なる場合、または行末にスペースがある場合(Microsoftの世界のキャリッジリターンを含む)、正規表現を調整する必要があります。

答え2

Bashの代わりにPythonに切り替えると、少なくとも1つの解決策を見つけるのが簡単になります。

#!/usr/bin/env python3

import argparse
import re

from pathlib import Path

def remove_doc(filename: str):
    fpath = Path(filename)
    content = fpath.read_text()
    pattern = r"/\*\*\n\s+\* @author.*\n\s+\*/\n"
    updated_content = re.sub(pattern, r"", content)
    fpath.write_text(updated_content)

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Remove auto-generated documentation.')
    parser.add_argument('fpath', type=str)
    args = parser.parse_args()
    remove_doc(args.fpath)

関連情報