배우는 내용 : [ sed 삭제(d), 출력(p), 치환(s) ]
sed
vim 과 sed 비교
vim | sed | |
1 | 파일 열기 | 셸에서 편집내용(스크립트) 을 입력 |
2 | 메모리상에서 편집 | 편집 |
3 | 저장 | 편집 결과를 표준 출력에 출력 (저장 x) |
sed 명령어
sed [옵션] <스크립트> <대상 파일>
<스크립트> : 주소(정규 표현식도 가능)와 명령어를 조합한 문자열, 주소가 없으면 모든 행에대해 명령어가 실행된다.
동작방식:
한 행을 읽으면 먼저 패턴 스페이스라는 장소에 복사
편집 명령어를 실행한 뒤 패턴 스페이스의 내용을 출력
기본적으로 패턴 스페이스에 있는 내용을 자동으로 출력
* 패턴 스페이스 (패턴 버퍼) : 현재 작업중인 텍스트의 임시 저장 공간
<실습파일 내용>
Ber
Beer
BeerBeer
BeerBeerBeer
Beeeeeeeeer!!!
My Vodka
My Wine
삭제 ( d )
$ sed 1d drink2.txt # 첫 번째 행을 삭제
Beer
BeerBeer
BeerBeerBeer
Beeeeeeeeer!!!
My Vodka
My Wine
$ sed 2,5d drink2.txt # 2 행부터 5행까지 삭제
Ber
My Vodka
My Wine
$ sed '3,$d' drink2.txt # 3행 부터 마지막 행까지 삭제
Ber
Beer
$ sed /^B/d drink2.txt # B로 시작하는 행 삭제
My Vodka
My Wine
- $ 는 마지막 행을 의미
출력 ( p )
$ sed 1p drink2.txt # 1행을 출력
Ber
Ber
Beer
BeerBeer
BeerBeerBeer
Beeeeeeeeer!!!
My Vodka
My Wine
sed는 기본적으로 패턴 스페이스의 내용을 출력
1. sed 는 해당 파일의 각 줄(행)을 순차적으로 읽어 패턴 스페이스에 로드
2. 1p 명령에 따라 1행이 추가로 출력
3. -n 옵션의 부재로 모든 행을 출력
$ sed -n 1p drink2.txt
Ber
치환 ( s )
's/(치환 전 문자열)/(치환 후 문자열)/옵션'
$ sed 's/Beer/Whisky/' drink2.txt
Ber
Whisky
WhiskyBeer
WhiskyBeerBeer
Beeeeeeeeer!!!
My Vodka
My Wine
$ sed 's/Beer/Whisky/g' drink2.txt # g 옵션 포함
Ber
Whisky
WhiskyWhisky
WhiskyWhiskyWhisky
Beeeeeeeeer!!!
My Vodka
My Wine
$ sed 's/^B.*r/Whisky/g' drink2.txt # B로 시작하고 r로 끝나는 문자열 치환
Whisky
Whisky
Whisky
Whisky
Whisky!!!
My Vodka
My Wine
'g' : 발견한 모든 문자 치환
명령어 조합
$ sed 's/!//g' drink2.txt # !를 전부 삭제
Ber
Beer
BeerBeer
BeerBeerBeer
Beeeeeeeeer
My Vodka
My Wine
$ sed -n 's/!//gp' drink2.txt # -n : 치환된 행만 출력
Beeeeeeeeer
# 1행과 3행 사이의 문자열 중에서 Beer 를 Whisky로 치환
$ sed '1,3s/Beer/Whisky/g' drink2.txt
Ber
Whisky
WhiskyWhisky
BeerBeerBeer
Beeeeeeeeer!!!
My Vodka
My Wine
'g' : 발견한 모든 문자 치환
확장 정규 표현식 사용 -r
- 기본 정규 표현식과 확장 정규 표현식
$ sed -r 's/Be+r/Whisky/' drink2.txt
Whisky
Whisky
WhiskyBeer
WhiskyBeerBeer
Whisky!!!
My Vodka
My Wine
$ sed 's!Be\+r!Whisky!' drink2.txt
Ber
Beer
BeerBeer
BeerBeerBeer
Beeeeeeeeer!!!
My Vodka
My Wine
# s 뒤에 ! 혹은 %를 이용하여 구분자(/)를 바꿀 수 있다.
치환 전 정규 표현식을 통해 치환 후 문자열을 \1 로 참조하는 방법
기본 정규 표현식 | 확장 정규 표현식 |
\(\) 로 그룹화 하여 \1 로 참조 | ()로 그룹화 하여 \1 로 참조 |
$ sed -r 's!My (.*)!--\1--!'
Ber
Beer
BeerBeer
BeerBeerBeer
Beeeeeeeeer!!!
--Vodka--
--Wine--
sed 's/My \(.*\)/--\1--/' drink2.txt
Ber
Beer
BeerBeer
BeerBeerBeer
Beeeeeeeeer!!!
--Vodka--
--Wine--
'책 > 모두의 리눅스' 카테고리의 다른 글
[ 책 ] [ 모두의리눅스 ] 15장 셸 스크립트 작성 (0) | 2024.04.07 |
---|---|
[ 책 ] [ 모두의 리눅스 ] 14장 : awk (오크) : 패턴 검색 및 처리 (0) | 2024.04.06 |
[ 책 ] [ 모두의 리눅스 ] 13장 확장 정규 표현식 (0) | 2024.04.04 |
[ 책 ] [ 모두의 리눅스 ] 13장 메타문자 (0) | 2024.04.04 |
[ 책 ] [ 모두의 리눅스 ] 13 장 grep, 정규표현식 (0) | 2024.04.03 |