[bash: sed] 출력 또는 제거할 범위를 문자열 패턴으로 지정하기 리눅스 bash script

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: sed] 특정 행부터 파일 마지막까지 출력하기 2018-12-12 21:06:22 #

    ... t 파일에서 문자열 "abc"가 처음 나오는 행부터 마지막 행까지 출력하는 경우다. 문자열로 범위를 지정하는 방법에 대한 좀 더 자세한 내용은 이전 게시물을 참고하자. 여기로 # my_file.txt 파일에서 문자열 abc가 처음 나오는 행부터 마지막 행까지 출력 sed -n "/abc/,\$p" my_file.txt ... more

덧글

댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.

Google Analytics


B-Side


adsense(w160_h600)2

통계 위젯 (화이트)

629349
4728
1719424

ad_widget_2