次のように自動的に生成された文書を含むいくつかの関数があるとします。
/**
* @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)