참조 원문1 : SED(Stream EDitor ) Explained in detail for Linux/Unix
참조 원문2 : Learn SED with examples
1. 검색과 치환(s는 search의 약자)
아래는 단어를 찾아 다른 단어로 치환하는 문법이다.
sed ‘s/searchterm/replaceterm/’ inputfile
또는
cat inputfilename | sed ‘s/searchterm/replaceterm/’
또는
echo “This is test message” | sed ‘s/searchterm/replaceterm/’
예제1: test.txt 파일에서 google을 찾아 yahoo로 치환
sed ‘s/google/yahoo/’ test.txt
예제2: sed는 기본적으로 처음 찾은 단어만 치환한다. 모든 단어를 치환하려면 g 스위치를 사용해야 한다.
echo “sheena leads, sheila needs” | sed ‘s/sh/le/g’
예제3: Separator 변경법. Separator가 검색하려는 단어에 포함된 경우 유용하다. 예를 들어 /var/ftp/pub을 검색하여 /opt/ftp/com으로 치환하려고 할 때 아래처럼 해도 제대로 작동하지 않는다.
sed ‘s//var/ftp/pub//opt/ftp/com/’ test.txt
이럴 땐 separator를 /에서 #나 $ 같은 다른 문자로 바꿔야 한다. 아래는 _를 사용하는 예제다.
sed ‘s_/var/ftp/pup_/opt/ftp/com_’ test.txt
예제4: 아래는 surendra를 Mr. surendra로 바꾸는 예제다.
sed ‘s/surendra/Mr. &/’ test.txt
예제5: 아래는 abc123suri 같은 패턴을 suriabc123으로 바꾸는 예제다.
echo “abc123suri” | sed ‘s/([a-z]*)([0-9]*)([a-z]*)/312/’
2. 출력(-n과 p 스위치)
예제6: 기본적으로 sed는 모든 줄을 출력하지만 -n(출력 억제)과 p 옵션을 사용하여 바뀐 줄만 출력할 수 있다.
cat tem.txt | sed -n ‘s/surendra/bca/p’
3. 수정(-i, w, d 스위치와 쉘 리다이렉션)
예제7: -i 옵션을 사용하면 변경점을 원본 파일에 적용할 수 있다.
sed –i ‘s/bca/Surendra/’ tem.txt
예제8: 리다이렉션으로도 같은 일을 할 수 있다.
sed ‘s/baby/dady/’ < tem.txt > abc.txt
예제9: w 옵션으로 변경점을 다른 파일에 저장할 수 있다.
sed ‘s/baby/dady/w abc.txt’ tem.txt
4. 여러 SED 명령어와 연속 연산자(-e와 ; 스위치)
예제10: Surendra, mouni, baby를 bca, mca, bba로 치환
sed -e ‘s/surendra/bca/’ -e ‘s/mouni/mca/’ -e ‘s/baby/bba/’ tem.txt
예제11: ;(연속 연산자)로 더 위보다 더 줄이기
sed ‘s/Surendra/bca/;s/mouni/mca/;s/baby/bba/’ tem.txt
5. 줄 번호 연산자(,와 = 스위치)
예제12: 3번째 줄 내용만 검색해서 치환하기
sed ‘3 s/Surendra/bca/’ tem.txt
예제13: 1~4번째 줄 내용만 검색해서 치환하기
sed ‘1,4 s/Surendra/bca/’ tem.txt
예제14: 2번째 줄에서부터 문서 끝까지 검색해서 치환하기
sed ‘2,$ s/Surendra/bca/’ tem.txt
예제15: 매 두 줄마다 한 줄로 결합. 아래는 N 옵션으로 두 줄을 합치는 예제. 치환으로 \n을 공백 같은 것으로 바꿔줘야 원하는 의도대로 나온다. sed는 기본적으로 한 줄씩 처리하여 출력하는데 두 줄을 하나로 합쳐놔도 라인피드(\n)가 그대로 남아있기 때문에 전혀 변하지 않은 것처럼 보이기 때문이다. 그리고 사실 아래 소개할 예제를 위해서 말고는 잘 안 쓰인다.
sed ‘N;s/\n/ /’ tem.txt
예제16: 검색해서 치환 후 모든 줄에 번호 넣기(‘=’ 옵션 사용)
sed = tem.txt
예제17: 번호를 같은 줄에 넣기
sed = tem.txt | sed ‘N;s/n/t/’
6. 검색 연산자(/단어/)
예제18: 한 단어를 검색해서 걸린 줄에서 작업하기
sed ‘/surendra/ s/audi/xyz/’ tem.txt
예제19: 위를 응용해서 특정 범위의 줄 내에서 작업하기
sed ‘3,/Surendra/ s/audi/xyz/’ tem.txt
예제20: 더 응용해서 찾은 단어가 있는 줄부터 문서 끝까지를 범위로 작업하기
sed ‘/Surendra/,$ s/audi/xyz/’ tem.txt
7. 부정 연산자(!)
이 연산자는 w, p, d 옵션과 함께 사용한다.
예제21: abc 라는 단어가 없는 모든 줄을 출력
sed –n ‘/abc/ !p’ tem.txt
예제22: surenda 라는 단어가 있는 줄을 제외한 모든 줄을 삭제
sed ‘/surendra/ !d’ tem.txt
예제23: 1~3 줄만 빼고 모든 줄 삭제
sed ‘1,3 !d’