Daylogs/Unix

sed 명령으로 파일에서 특정 문자열 치환하기

ohgyun 2016. 6. 6. 22:50
발생일: 2015.11.09

키워드: sed, 치환, 정규식

문제:
쉘 스크립트로 파일에서 특정 문자열을 찾아 치환하려고 한다.

요청하는 API 버전을 바꿀 목적이었고,
파일 내에서 `/api/10/` 과 같은 패턴을 찾아 `/api/{new_version}`으로 변경하려고 한다.

어떻게 하면 될까?


해결책:
sed 명령으로 처리할 수 있다.

문제의 경우, 아래처럼 처리했다.

new_version 은 새 버전이 담긴 변수이고,
file 은 대상 파일이 담긴 변수,
TEMP_FILE 은 결과를 임시 파일에 쓴 후 덮어쓰기 위한 용도로 정의한 변수이다.


sed -e "s/\(\"\/api\/\)[0-9\[0-9]*\(\/\)/\1${new_version}\2/g" $file > $TEMP_FILE

# sed 명령: 파일에서 특정 문자열을 치환해 적용할 수 있다.
    # - `s/[pattern]/[replacement]/g`와 같은 패턴으로 적용할 수 있다.
    # - 그룹은 `( )` 대신 `\( \)` 으로 사용한다.
    # - 매칭된 값은 `\1`, `\2`와 같이 참조할 수 있다.
    # - 탭을 포함한 공백은 `[ ^I]`로 매칭할 수 있다.
    # - `+` 수량자는 extend 모드에서만 사용할 수 있다.
    #   실행 환경이 다르기 때문에 아래 코드에서는 `[0-9][0-9]*` 로 우회한다.
    # @see http://www.grymoire.com/Unix/Sed.html
   

반응형