[출처] 간단하지만 강력한 파일 편집기 'sed'|작성자 신바람형제들
1. sed란 무엇인가?
sed는 비 대화형 모드의 줄 단위 편집기라고 합니다.
vi 편집기처럼 직접 파일을 열어 고치지 않고 커맨드 창 또는 스크립트에서 동작을 하여 원하는 부분만 변경해준다는 특징이 있습니다.
2. sed의 특징
sed는 쉘 또는 스크립트에서 파이프(|)와 같이 사용될 수 있는 명령어입니다.
그리고 기본적으로 정규표현식이 사용가능하기 때문에 정규표현식을 알면 더 고급지게 sed를 이용할 수 있습니다.
주의할 점은 정규표현식을 사용하기 때문에 특수문자 앞에 역 슬래시(\,\)를 붙여주어야 합니다. \를 쓰면 리눅스에서는 역슬래시로 받아들입니다.
예) sed 's/\$man/man/g' test.txt
3. sed 옵션
옵션은 sed -e 의 형식으로 사용됩니다.
e: sed를 사용하였을 때 출력되는 값을 보여줍니다. 이 옵션은 기본값으로 굳이 안 써도 되지만 다중 명령어를 쓸 때는 반드시 써야 합니다.
예) sed /man/p -e /girl/p 파일명: man과 girl이 들어있는 줄을 한번 더 출력
i: 변경되는 값을 실제로 파일에 저장하는 옵션입니다. 이 옵션은 출력되는 값이 없이 바로 실제 파일에 적용되는 것이 특징입니다.
n: 특정 값이 들어간 줄만 출력해주는 기능입니다. 주로 p 명령어와 사용된다고 합니다.
f: 스크립트를 파일로부터 읽어들이며 명령어를 지정하는 명령어라고 하는데 저는 거의 사용하지 않습니다.
4. sed 명령어
d: 줄 삭제 명령어
a\: 해당 값이 있는 줄 다음에 입력. 그냥 밑에 줄 하나 삽입되는 정도로 알고 있으면 됩니다.
i\: 줄 앞에 첨가 명령어
c\: 해당 줄을 변경하는 명령어
g: 한 줄에 해당하는 값이 여러개 있을 경우에 모두 변경하는 명령어. 이 명령어를 해당 줄의 제일 앞에 내용만 변경됩니다.
p: 조건에 부합하는 라인을 출력하는 명령어
s/orgin/change/: 앞에 것을 뒤에 것으로 변경하는 명령어
5. sed 사용방법
기본적으로 p,d,s 옵션들을 가장 많이 사용한다고 알려져있습니다.
세가지만 예시로 들겠습니다.
궁금하신 부분은 댓글로 남겨주세요~!
p
기능: 출력
sed p 파일명: 파일 전체 출력 (cat과 같은 기능)
sed 3p 파일명: 3번째 줄 한번 더 출력
sed 3,4p 파일명: 3,4번째 줄 한번 더 출력
sed /man/p 파일명: man이 포함된 줄 한번 더 출력
sed -n 3p 파일명: 3번째 줄만 출력(n이 붙으면 조건에 해당하는 줄만 출력됨)
d
기능: 삭제
sed 3d 파일명: 3번째 줄 삭제하고 나머지 줄 출력
sed /man/d 파일명: man이 포함된 줄 삭제 나머지 줄 출력
s
기능: 치환
sed 's/man/girl/g' 파일명: man을 girl로 치환
sed -n 's/man/girl/p' 파일명: man을 girl로 치환하고 치환된 줄을 출력
6. 조금 더 유용한 sed 이용방법
공백 줄 제거하기
sed '/^$/d' 파일명
모든 줄마다 공백을 추가하기
sed 'a\\' 파일명
주석이 처리된 줄 모두 삭제
sed '/^#/d' 파일명
이 외에 리눅스 세팅 시에 스크립트에 등록하여 특정 줄을 추가하는 등의 역할을 수행하게 할 수도 있습니다.
sed -i "/HISTSIZE=1000/a\HISTTIMEFORMAT='%F %T ---'" /etc/profile
위의 사용방법은 history 결과값에 날짜와 시간을 표현하게 해주는 방법입니다.
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
혹은 selinux를 자동으로 꺼주는 스크립트를 만들 수도 있구요.
잘 쓰면 정말 유용하게 사용할 수 있는 sed, 간과하지 말고 자주자주 사용하도록 합시다~!
'linux' 카테고리의 다른 글
yum 주요 사용법 및 고급 사용법 (history 관리, plugin 사용, 트랜잭션 undo 등)(펌) (0) | 2016.02.01 |
---|---|
RHEL/CentOS 7 버전에서 runlevel 변경하기 (0) | 2016.02.01 |
자주 쓰는 find/exec 조합 정리 (0) | 2016.01.22 |
linux에서 네트워크 디바이스 번호 관리 eth0,, eth1... (0) | 2016.01.22 |
RHEL/CentOS 7 버전에서 네트워크 디바이스 이름 변경하기 (0) | 2016.01.22 |