본문 바로가기

Operating Systems/Linux

[ Linux ] SED 활용

# 스크립트에 따라 표준 출력 결과를 편집하여주는 명령어
# 실제 파일도 편집해 주는 편집기 역활을 한다
# Stream Editor
# sed [스크립트] [파일명] 형태로 사용

# 옵션
# 옵션이 없을 경우 해당되는 행을 한번 더 출력한다.
# -n : 해당하는 행만 줄력하도록 한다
# -e : 스크립트를 여러개 사용할수 있도록 한다 => sed -n -e '1p' -e '2p' /etc/passwd
# -i : 파일을 실제로 수정하도록 한다

# 스크립트 명령어

# p (print) 명령어
# 해당하는 행을 출력하여 주는 명령어
# 'm,np'       : m번째에서 n번까지의 행을 출력 => sed -n '1,3p' /etc/passwd
# '/regex/p'   : 정규식에 해당하는 행을 출력 => sed -n '/[Rr]oot/p' /etc/passwd
# 'n,/regex/p' : n번째에서 정규식에 해당하는 행을 발견할때까지의 행을 출력 => sed -n '5,/root/p' /etc/passwd
# 정규식은 '/regex/,/regex/p' 와 같이 여러개를 지정 가능하다. ( or 조건으로 동작 ) => sed -n '/adm/,/lp/p' /etc/passwd

# d (delete) 명령어
# 해당하는 행을 삭제하여 주는 명령어
# 'nd'        : n번째 행을 삭제하고 출력 => sed '1d' /etc/passwd
# 'm,nd'      : m번째 부터 n번째 행을 삭제하고 출력 => sed '1d' /etc/passwd
# 'n,$d'      : n번째 부터 마지막 라인까지 삭제하고 출력 => sed '5,$d' /etc/passwd
# '$d'        : 마지막 라인을 삭제하고 출력 => sed '$d' /etc/passwd
# /regex/d    : 정규식이 포함된 라인만 삭제하고 출력 => sed '/[Rr]oot/d' /etc/passwd

# s (substitution) 명령어
# 해당하는 정규식을 치환하여 주는 명령어
# 's/regex/string/' : 정규식에 대응하는 문자를 입력한 문자열로 치환하여 출력 => sed 's/[Rr]oot/!!/' /etc/passwd
# 'm,ns/regex/string/' : m번째에서 n번쨰 행의 정규식에 대응하는 문자를 입력한 문자열로 치환하여 출력 => sed '1,3s/[Rr]oot/!!/' /etc/passwd
# 's/regex/string/g' :  정규식에 대응하는 문자가 한 문장에 여러개 있을 경우 모두 치환하여 출력 => sed '1s/0/AAA/g' /etc/passwd

# example : 
# sed 's/root/ROOT/g' /etc/passwd /* root->ROOT 치환 */
# sed 's/^root/ROOT/g' /etc/passwd /* 문서전체에서 라인의 처음 root->ROOT */
# sed -n 's/^root/ROOT/p' /etc/passwd /* 검색된 라인의 처음 root->ROOT */
# sed -n 's/root/ROOT/gp' /etc/passwd /* 검색된 라인의 root->ROOT, Globally, print */
# sed 's/[0-9][0-9]$/&.5/' /etc/passwd /* 라인의 마지막 두개의 숫자뒤에 .5 붙임 */
# sed 's/∖(Mar∖)got/∖1ianne/p' datafile /* Margot -> Marianne */
# sed 's/^....//' filename /* 각행의 첫 4글자 삭제 */
# sed 's/....$//' filename /* 각행의 마지막 4글자 삭제 */
# sed 's#/test/file.sh#/test/file.c#g' file1 /* /test/file.sh -> /test/file.c */ 복잡하기 때문에 #으로 구분하기 위해
# sed 's;/test/file.sh;/test/file.c;g' file1 /* /test/file.sh -> /test/file.c */