Find 와 Sed 를 사용한 문자열 또는 텍스트 검색(search) 치환(replace) 명령어

업데이트:

Sed 를 사용한 문자열 치환 관련 내용

문자열 치환(replace) 일반적인 사용방법

# 파일 내에서 매칭되는 문자열을 / 이하의 내용으로 변환
sed "s/my target text/my replaced text/" your_file.txt 

문자열 변경,치환(replace) 대상 목록을 보고 싶을때

# -n option 자동 출력을 비활성화. 그렇다고 해서 일치하는 라인을 출력해주는 것도 아님.
# -p option 이 있어야 일치하는 라인을 출력해줌
# 테스트 용도로 활용도가 높음 특히 정규식 사용시
sed -n "s/my target text/my replaced text/p" your_file.txt 

정규식을 사용한 문자열 치환

# 정규식 사용은 -r option 을 사용하면 됨
# 이 예제는, 그룹핑 '( )' 과 OR 조건을 사용 (파이프라인 |)

# Sed OR 조건 예제
sed -n -r "s/SEGMENT CREATE IMMEDIATE|SEGMENT CREATE DEFERRED/I DO NOT WANT SEGMENT SYNTAX/p" your_file.txt 

# Sed 그룹핑 예제 \1 은 치환(replace)시, 그룹으로 매칭된 내용을 print 해줌
sed -n -r "s/(SEGMENT) CREATE IMMEDIATE/\1 DROP IMMEDIATE/p" your_file.txt

대상 파일의 내용을 범위로 하여 문자열 치환 하는 경우

# Sed 로 어떤 명령어를 사용할지 n p 옵션으로 확인하였다면, 실제로 치환 명령어를 사용해 보자

sed -i'' -r -e "s/SEGMENT CREATE IMMEDIATE|SEGMENT CREATE DEFERRED/I DO NOT WANT SEGMENT SYNTAX/" your_file.txt 
# p 옵션이 빠져있는지 확인
# -i 옵션이 실제로 치환을 하도록 하는 명령어임
# '' 를 추가한 이유는 sed가 새로운 파일을 만들어서 추가하였음. 추가하니 새로운 파일 생성 안함
# sed -ir -e "s/a/b/" a.txt 라고 명령을 날리면, a.txtr 라는 파일이 새로 생성됨
# -i 옵션은 파라미터를 받기를 기대하기 때문. 백업 파일명임
# 난 그런거 싫어서 늘 '' 추가함
# 그리고 여러 옵션을 묶어서 사용하지 않는것도 중요함 -ir

Find 명령어와 Sed 를 사용하면 좀 더 사용 범위가 확대 된다

# 한개 이상의 파일들을 대상으로 일괄 치환이 필요할 때
find . -type f -name my_*.log -exec sed -i'' -e "s/foo/bar/" {} \;

대소문자 무시, 중복허용 (Ignore Case, Global)

# 대소문자 무시 i 옵션
sed -i'' -e "s/foo/bar/i" your_file.txt

# 중복허용 g 옵션
sed -i'' -e "s/foo/bar/g" your_file.txt