Server Management/LInux Server
sed & awk
BAGE
2010. 8. 2. 16:35
sed: 비대화형 모드의 텍스트 파일 에디터
awk: C형태의 문법을 갖는 필드 단위의 패턴 처리 언어
정규표현식사용, 기본입출력은 표준입출력사용
sed
[주소-범위]/p
print
[주소-범위]/d
delete
s/pattern1/pattern2/
한 줄에서 처음 나타나는 pattern1을 pattern2로 치환
[주소-범위]/s/pattern1/pattern2/
주소-범위에 대해 한 줄에 처음 나타나는 pattern1을 pattern2로 치환
[주소-범위]/y/pattern1/pattern2/
주소-범위에 대해 pattern1을 pattern2로 바꿈 (tr과 동일)
g
입력의 일치하는 각 줄에서 발생하는 모든 패턴에 대해 동작
sed -e '/^$/d'
sed -n '/xzy/p'
8d | 입력의 8번째 줄을 지워라. |
/^$/d | 빈 줄을 모두 지워라. |
1,/^$/d | 첫 줄부터 처음 나타나는 빈 줄까지 지워라. |
/Jones/p | "Jones"를 포함하는 줄만 출력하라(-n 옵션을 써서). |
s/Windows/Linux/ | 입력의 각 줄에서 처음 나오는 "Windows"를 "Linux"로 치환하라. |
s/BSOD/stability/g | 입력의 각 줄에서 "BSOD"가 나올 때 마다 "stability"로 치환하라. |
s/ *$// | 모든 줄의 끝에 나오는 빈 칸을 지워라. |
s/00*/0/g | 연속적인 모든 0을 하나의 0으로 압축하라. |
/GUI/d | "GUI"를 포함하는 모든 줄을 지워라. |
s/GUI//g | "GUI"가 나오는 줄에서 "GUI"만 지워라. |
awk
awk는 입력된 각 줄을 필드로 나눔. 기본값으로 빌드는 공백문자로 구분된 연속 문자로 구분하나 옵션을 달리할 수 있음
awk는 구조화된 텍스트 파일, 특히 열과 행으로 나뉜 테이블 처리에 이상적 도구가 됨
쉘 스크립트에서 awk는 '{ }' 로 묶음
awk '{print $3}'
세번째 필드를 표준출력으로 출력
awk '{print $1 $5 $6}'
1, 5, 6번째 필드 출력
{ total += ${a} }
total출력을 위해 END 를 사용해 전체 처리과정 마침
END {print total}
END의 짝인 BEGIN은 awk가 입력 처리전 실행할 코드 블럭 앞에 배치