![파일에서 패턴과 일치하는 모든 함수 문서를 제거합니다.](https://linux55.com/image/221841/%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%ED%8C%A8%ED%84%B4%EA%B3%BC%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%EB%AA%A8%EB%93%A0%20%ED%95%A8%EC%88%98%20%EB%AC%B8%EC%84%9C%EB%A5%BC%20%EC%A0%9C%EA%B1%B0%ED%95%A9%EB%8B%88%EB%8B%A4..png)
다음과 같이 자동으로 생성된 문서를 포함하는 여러 함수가 있다고 가정해 보겠습니다.
/**
* @author John Doe
*/
파일에 이런 방식으로 기록된 모든 함수에서 이 3줄을 쉽게 제거할 수 있는 방법이 있습니까? 이 문제의 까다로운 점은 단순히 전체 파일을 한 줄씩 처리하는 것이 아니라 일부 컨텍스트를 살펴봐야 한다는 것입니다.
답변1
그리고 perl
:
perl -0777 -i -pe 's{^/\*\*\n \* @author.*\n \*/\n}{}gm' the-file
이러한 주석의 들여쓰기 수준이 다르거나 줄 끝에 공백이 있는 경우(Microsoft 세계의 캐리지 리턴 포함) 정규식을 조정해야 합니다.
답변2
Bash 대신 Python으로 전환하면 최소한 하나의 솔루션을 찾는 것이 더 쉬워집니다.
#!/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)