알고리즘 문제 일괄 수정을 위한 스크립트 - swkim0128/PARA GitHub Wiki
실행환경 : mac os(해당 명령어는 맥 os에서 유요한 명령어 형식)
find . -type f -name "*.java" -exec sed -i '' 's/extends Solution/extends Main/g' {} +
- 목적: 모든 Java 파일에서 extends Solution을 extends Main으로 변경.
- 확인 방법:
grep -H 'extends Main' $(find . -type f -name "*.java")
이 명령은 모든 변경된 파일을 보여줍니다.
find . -type f -name "*.java" -exec sed -i '' 's/solution/run/g' {} +
- 목적: 모든 Java 파일에서 solution 메서드 이름을 run으로 변경.
- 확인 방법:
grep -H 'public void run' $(find . -type f -name "*.java")
이 명령은 public void run 메서드가 생성된 모든 파일을 보여줍니다.
find . -type f -name "*.java" -exec sed -i '' '/public void run() throws IOException {/a\
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));' {} +
- 목적: 모든 Java 파일의 public void run() throws IOException { 라인 바로 아래에 BufferedReader를 추가.
- 확인 방법:
grep -H 'BufferedReader read' $(find . -type f -name "*.java")
이 명령은 BufferedReader read가 추가된 파일들을 보여줍니다.
find . -type f -name "*.java" -exec bash -c '
class_name=$(awk "/public class/ {print \$3}" "$1")
sed -i "" -e "/^}$/i\\
static {\\
try {\\
new ${class_name}().run();\\
} catch (IOException e) {\\
throw new RuntimeException(e);\\
}\\
}" "$1"
' bash {} \;
- 목적: 모든 Java 파일의 클래스명에 맞게 동적 static 블록을 추가합니다. static 블록은 마지막 중괄호(}) 바로 위에 추가됩니다.
- 확인 방법:
grep -A 5 'static {' $(find . -type f -name "*.java")
이 명령은 static 블록이 추가된 파일과 그 안의 내용을 확인할 수 있습니다.
find . -type f -name "*.java" -exec sed -i '' 's/implements SolutionImpl/extends Main/g' {} +
명령어 설명
- find . -type f -name "*.java":
- 현재 디렉터리와 하위 디렉터리에서 모든 .java 파일을 찾습니다.
- sed:
- s/implements SolutionImpl/extends Main/g: implements SolutionImpl을 extends Main으로 모든 파일에서 대체합니다.
- -i '' (macOS): 백업 없이 파일을 수정합니다.
- -i (Linux): 백업 없이 수정.
결과 확인
수정된 파일을 확인하려면 아래 명령어를 사용하세요:
grep -H 'extends Main' $(find . -type f -name "*.java")
각 명령어가 제대로 실행되었는지 확인하는 방법을 설명해드렸습니다. 정상적으로 수정되었다면:
- extends Main이 모든 Java 파일에 존재.
- public void run 메서드가 모든 solution 메서드 이름을 대체.
- BufferedReader read 코드가 run 메서드 아래에 추가됨.
- static 블록이 각 클래스의 마지막 중괄호(}) 바로 위에 추가됨.