sed

markyang92·2022년 4월 9일
0

awk, sed

목록 보기
2/2
post-thumbnail
post-custom-banner
  • sed는 명령행에서 파일을 argument로 받아 명령어를 통해 작업한 후, 결과를 화면으로 확인하는 방식
  • 원본을 손상하지 않음
    • Pattern space, Hold space를 둠
      • Pattern Buffer: sed가 파일을 라인단위로 읽을 때, 그 읽힌 라인이 저장되는 임시 공간
        우리가 sed 명령으로 출력시, 여기 패턴 버퍼의 내용을 출력
        우리가 sed 명령으로 조작시, 여기 패턴 버퍼의 내용을 조작
        즉, 원본을 손상하지 않음.
        텍스트 1라인 -> 2라인으로 넘어가 글을 읽게되면, 여기 패턴 버퍼에는 2라인 현재 내용이 저장됨
      • Hold Buffer: 짧은 순간 임시 버퍼가 아니라, 좀 더 길게 가지고 있는 저장소
        어떤 내용을 Hold Buffer에 저장 시, sed가 이 내용을 재사용할 수 있다.

  • 전통적으로 스크립트에서 sed로 치환해야하는 부분은 @@VARIABLE@@ 방식으로 두고 있다.
# myscript.bb
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. 1~3줄 제거
    2. A -> B 치환

반드시 '/'를 써야되는 것은 아니다.

  • src.txt
FEED_URI=@FEED_URI@
FEED_PATH=@FEED_PATH@
  • shell
$ sed -e "s#@FEED_URI@#${var}#" -e "s#@FEED_PATH#${var}#" -i src.txt

다중 수정

find . -type f -exec sed -i 's/quick/brown/g' {} +
profile
pllpokko@alumni.kaist.ac.kr
post-custom-banner

0개의 댓글