검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 쉘 스크립트

참조 원문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'

2013/07/02 17:34 2013/07/02 17:34
Posted
Filed under 쉘 스크립트
참조 원문 : Line Addressing in sed

  sed 명령어를 통한 라인 어드레싱을 이용하면 필요한 줄만 골라 텍스트 작업을 할 수 있습니다. 이때 정규식을 사용할 수도 있죠. 두 숫자 사이에 콤마(,)를 사용하면 범위로 취급합니다.

1. 특정 범위를 출력
  file.txt 라는 파일에서 60번째부터 파일의 끝($로 표현)까지 출력하는 방법은 아래와 같습니다.
sed '60,$p' file.txt

2. 특정 범위의 줄을 삭제하여 출력
  file.txt 라는 파일에서 1~5번째 줄을 삭제한 후 "sshd"라는 패턴과 일치하는 줄을 출력하는 방법은 아래와 같습니다.
sed '1,5d' file.txt | sed -n '/sshd/p'

3. 특정 문자열을 원하는 문자열로 치환하여 출력
  file.txt 라는 파일에서 1~400번째 줄 사이에 있는 "pop3"라는 문자열을 "POP3"로 치환하여 그 내용을 file2.txt 파일에 저장하는 방법은 아래와 같습니다.
sed -n '1,400 s/pop3/POP3/p' file.txt > file2.txt
  sed 명령어는 입력 파일을 사용자가 원하는 대로 가공하여 출력만 할 뿐 원본 파일을 수정하지 않기 때문에 결과를 보관하고 싶다면 리다이렉션을 통해 별도의 파일로 저장해야 합니다.


2013/06/17 17:31 2013/06/17 17:31