bash script2023. 9. 15. 09:05

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/619532

sed에서 행번호를 이용해서 범위를 지정하는 방법은 이전 게시물을 참고하자. 기본적인 내용은 대략 아래와 같다.

# my_data.txt 파일의 10번째 행 출력(p). -n 옵션으로 전체 출력은 억제(해당 조건에 맞는 행만 출력)
sed -n 10p my_data.txt

# my_data.txt 파일의 10~20번째 행 출력
sed -n 10,20p my_data.txt

# my_data.txt 파일에서 10번째 행을 제거(d)하고 나머지 출력
sed 10d my_data.txt

# my_data.txt 파일에서 10~20번째 행을 제거하고 나머지 출력
sed 10,20d my_data.txt

위의 예시에서 행번호 대신 특정 문자열을 기준으로 할 경우에는 "/문자열/" 형태로 지정한다. 정규표현식(regular expression)도 사용 가능하다. 예를 들어 "abc"가 포함된 행을 출력하는 경우 아래의 예시와 같이 할 수 있다.

# my_data.txt 파일에서 문자열 "abc"가 포함된 행 출력
sed -n '/abc/p' my_data.txt

위의 예시는 "abc"가 포함된 행이 모두 출력되므로 사실상 grep과 다를 바 없다. 그러나 "abc"가 포함된 행부터 "123"이 포함된 행까지 출력한다거나 하는 경우다. 아래의 예시를 보자.

# my_data.txt 파일에서 문자열 "abc"가 포함된 행부터 "123"이 포함된 행까지 출력
sed -n '/abc/,/123/p' my_data.txt

문자열 "abc"가 포함된 행부터 시작해서 "123"이 포함된 행이 처음 나올 때까지의 범위가 출력된다.

예를 들어 웹(http) 세션에서 헤더(header)와 내용(body)은 빈 줄로 구분되는데, sed를 이용해서 편리하게 분리할 수 있다.

# 웹 세션 파일 session.dat에서 http 헤더만 출력(첫번째 행부터 빈 줄이 처음 나온 행까지)
sed -n '1,/[[:space:]]*$/p' session.dat

# 웹 세션 파일 session.dat에서 http 헤더를 제외하고 내용만 출력
sed '1,/[[:space:]]*$/d' session.dat

728x90
Posted by 반달가면