sed
는 명령행에서 파일을 argument로 받아 명령어를 통해 작업한 후, 결과를 화면으로 확인하는 방식
- 원본을 손상하지 않음
- Pattern space, Hold space를 둠
- Pattern Buffer: sed가 파일을 라인단위로 읽을 때, 그 읽힌 라인이 저장되는 임시 공간
우리가 sed 명령으로 출력시, 여기 패턴 버퍼의 내용을 출력
우리가 sed 명령으로 조작시, 여기 패턴 버퍼의 내용을 조작
즉, 원본을 손상하지 않음.
텍스트 1라인 -> 2라인으로 넘어가 글을 읽게되면, 여기 패턴 버퍼에는 2라인 현재 내용이 저장됨
- Hold Buffer: 짧은 순간 임시 버퍼가 아니라, 좀 더 길게 가지고 있는 저장소
어떤 내용을 Hold Buffer에 저장 시, sed가 이 내용을 재사용할 수 있다.
- 전통적으로 스크립트에서 sed로 치환해야하는 부분은 @@VARIABLE@@ 방식으로 두고 있다.
DEPLOY_IPK_FEED_PATH = "@@PACKAGE_FEED_PATH@@"
DEPLOY_IPK_FEED_PATH ?= "${DEPLOY_DIR_IPK}"
$ sed 's/@@PACKAGE_FEED_PATH@@/\/MY_PATH/g' ./myscript.bb
'''중략
DEPLOY_IPK_FEED_PATH = "/MY_PATH" # 치환된 부분
DEPLOY_IPK_FEED_PATH ?= "${DEPLOY_DIR_IPK}"
'''
sed -n ''
: sed로 작업한 부분만 억제 출력
sed -n '1,$p' : 1줄~전체 출력
sed -n '1p'
: 1줄만 출력
sed -n '1,3p'
: 1~3줄 출력
sed -n '8,$p'
: 8~끝 출력
sed -n -e '1p' -e '8,$p'
: 1줄, 8~끝까지 출력
sed -n '/ /p'
: 단어 찾아 출력
sed -n '/^107/p'
: 107로 '시작'하는 행만 출력
sed -n '/103/p'
: 103을 포함하는 행만 출력
sed -n '/DIR/p'
: DIR을 포함하는 행만 출력
$ curl -sL ${server} | sed -n '/DIR/p'
$ curl -sL ${server} | sed -n '/\[DIR\]/p'
[DIR] <- 단어 자체만 출력한 것
sed '//d'
: 서브 명령어 d, 삭제
sed '/ /d'
: / /
사이 단어 포함하는 줄 삭제
sed '/^$/d'
: 빈 라인 삭제
sed '/^ *$/d'
: 행의 시작이 ' ' 즉 공백이거나 빈줄
sed 's/ / /g'
: 단어 치환
sed '1 s/A/B/g'
: 1줄만 A->B 치환
sed 's/ / /gi'
: 단어 치환 + 대소구분x
sed -i
: 원본에 바로 영향 줌
sed -e
: 다중 편집
sed -e '1,3d' -e 's/A/B/g' [infile] > [outfile]
1~3
줄 제거
A -> B
치환
반드시 '/'를 써야되는 것은 아니다.
FEED_URI=@FEED_URI@
FEED_PATH=@FEED_PATH@
$ sed -e "s#@FEED_URI@#${var}#" -e "s#@FEED_PATH#${var}#" -i src.txt
다중 수정
find . -type f -exec sed -i 's/quick/brown/g' {} +