반달가면 이글루에서 백업 - 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
'bash script' 카테고리의 다른 글
리눅스 bash 스크립트에서 텍스트 파일을 읽어서 한 줄씩 배열(array) 원소로 할당하기 - 2 (readarray) (0) | 2023.09.15 |
---|---|
리눅스 bash 스크립트에서 연관 배열의 인덱스(index)/키(key) 출력하기 (0) | 2023.09.15 |
[bash: awk] 각 항목별 합계 계산 (0) | 2023.09.15 |
[bash: find, xargs, for] find 명령으로 추려낸 여러 파일에 대해 같은 작업을 하기 위한 스크립트 (0) | 2023.09.08 |
[bash: grep] 파일에 저장된 여러개의 검색어를 포함 또는 제외한 내용 출력하기 (0) | 2023.09.08 |