본문 바로가기
Linux

[linux] sed (stream editor) 사용법

by ds31x 2024. 5. 11.

sed (stream editor) 사용법

sed (Stream Editor)는

  • text stream을 처리하고 변형하는 데 사용되는
  • 매우 강력한 command based editor.
  • 처리를 명령어로 구성된 script로 지정함.

2024.05.11 - [Linux] - [Linux] sed vs. ed vs. vi : 텍스트 편집 도구 비교

 

[Linux] sed vs. ed vs. vi : 텍스트 편집 도구 비교

sed vs. ed vs. vi: 텍스트 편집 도구 비교 분석1. 서론Sed, Ed, Vi는 모두 UNIX, UNIX Like OS, Genetic UNIX 시스템에서 널리 사용되는 Text Edit Tool.각 도구는 서로 다른 특징과 용도를 가지고 있음. 2024.01.07 - [개

ds31x.tistory.com


1. sed 주요 option

1-1. -n : quiet / silent

  • 용도: 기본적으로 모든 출력을 끔.
  • 사용 예:
    • sed -n '/pattern/p' filename
      • 'pattern'과 일치하는 line(행)만 출력(p).
      • p: 아래의 sed가 지원하는 명령어들을 참고. print의 약어임.

2024.05.11 - [Linux] - [linux] example: sed: -n option

 

[linux] example: sed: -n option

example: sed: -n optionNginx의 액세스 로그를 예로 들어 sed 명령어의 사용법을 살펴보는 문서임.예제 Nginx 액세스 로그다음은 Nginx 액세스 로그의 간단한 예제임.각 라인은 웹 서버에 대한 하나의 HTTP

ds31x.tistory.com


1-2. -e command script

  • 용도: 다수의 명령을 연속적으로 실행할 수 있도록 하나 이상의 sed 스크립트를 지정.
  • 사용 예:
    • sed -e 's/foo/bar/' -e 's/baz/qux/' filename
      •  "foo"를 "bar"로, "baz"를 "qux"로 치환(s) (아래 명령어에서 치환 참고).
    • sed -e 'd' -e '/pattern/p' filename
      • 모든 행을 삭제 (d) 하고, 'pattern'과 일치하는 행만 출력 (p).

2024.05.11 - [Linux] - [linux] example: sed: -e option

 

[linux] example: sed: -e option

example: sed: -e optionsed의 -e 옵션은 여러 가지 편집 명령을 실행할 수 있게 해주는 옵션임.이는 스크립트를 여러 개 제공하여 복잡한 텍스트 처리를 수행할 때 매우 유용함.예제: Nginx 액세스 로그

ds31x.tistory.com


1-3. -f script file

  • 용도: sed 스크립트를 포함하고 있는 파일을 지정하여 실행.
  • 사용 예:
    • sed -f script.sed filename
      • script.sed 파일에 작성되어 있는 sed 명령
      • filename 이 지정하고 있는 파일을 대상으로 실행.
    • sed -f script.sed -i filename
      • script.sed 파일에 작성된 sed 명령을 실행하고
      • 파일 내용을 직접 수정 (-i: in-place).

2024.05.11 - [Linux] - [linux] example: sed: -f option

 

[linux] example: sed: -f option

example: sed: -f optionsed의 -f 옵션은 스크립트 파일에서 sed 명령을 읽어서 실행할 수 있게 해주는 옵션임.이 옵션을 사용하면 복잡한 또는 긴 sed 스크립트를 파일에 저장하여 관리하기 쉽고, 재사용

ds31x.tistory.com


1-4. -i 또는 -in-place

  • 용도: 파일의 원본 내용을 직접 수정합니다. 선택적으로 백업 확장자를 지정하여 원본 파일의 백업을 생성.
  • 사용 예:
    • sed -i '.bak' 's/foo/bar/' filename
      • "foo"를 "bar"로 치환(s)하고
      • 원본 파일의 백업을 filename.bak으로 저장.
    • sed -i 'd' filename
      • 파일의 모든 행을 삭제(d).

1-5. -r 또는 -regexp-extended

  • 용도: 확장 정규 표현식을 입력함. 이 옵션은 sed의 기본 정규 표현식보다 더 복잡한 패턴을 사용할 수 있도록 해줌.
  • 사용 예:
    • sed -r 's/(foo|bar)/baz/' filename
      • "foo" 또는 "bar"를 "baz"로 치환(s).
    • sed -r '/^[0-9]+$/d' filename
      • 숫자만으로 이루어진 모든 행을 삭제(d).

2024.05.11 - [Linux] - [linux] example: sed: -r or -E

 

[linux] example: sed: -r or -E

example: sed: -rsed의 -r 옵션(또는 GNU sed에서 -E 옵션)은 확장 정규 표현식을 사용할 수 있게 해주는 옵션임.이 옵션을 사용하면 보다 복잡한 패턴을 더 간단하고 읽기 쉬운 방식으로 작성할 수 있음.-

ds31x.tistory.com


1-6. -E

  • 용도:
    • -r과 유사하게 확장 정규 표현식을 사용할 수 있도록 해주는 옵션으로, GNU sed에서 사용됨.
    • 현재 macOS (OS X, Darwin) 또는 BSD 등에서 -r 옵션 대신 사용.
  • 사용 예:
    • sed -E 's/(foo|bar)/baz/' filename
      • 위의 1-5와 동일한 작업을 수행하지만 E를 사용.
    • sed -E '/^[0-9]+$/d' filename
      • 위의 1-5와 동일한 작업을 수행하지만 E를 사용.

2. sed 의 command script에서 사용되는 명령어.

여기 sed의 가장 기본적이고 자주 사용되는 명령어들을 소개함.

참고로 semicolon ; 을 사용하여 여러 개의 명령을 결합시켜, 해당 명령들이 한 줄에서 연속적으로 실행되도록 할 수 있음.

  • -e 옵션을 쓰지 않고도 각각의 명령을 구분할 수 있게 해 줌.
  • ; (command seperator)의 경우, 여러 명령을 순차적으로 실행(다중 명령어)하는 하나의 스크립트를 만들어서 처리.
  • 둘 다 앞의 명령이 다음 명령에 영향을 주게 됨. 순차적 처리.

2023.09.12 - [Linux] - [Linux] Pipe(|)와 다중 명령어 (;, &&, ||)

 

[Linux] Pipe(|)와 다중 명령어 (;, &&, ||)

| : PipePipe |는 2개의 processes를 연결해주는 연결 통로로서pipe 앞의 프로세스의 stdout(표준출력)이pipe 뒤의 프로세스의 stdin(표준입력)으로 쓰이도록 연결해주는 것임. 예를 들어 ls|sort|more의 경우 ls

ds31x.tistory.com


2-1. 치환 (Substitute) - s

가장 일반적으로 사용되는 sed 명령어는 s임.

이 명령어는 패턴을 찾아 다른 텍스트로 치환하는 데 사용됨.

sed 's/old/new/' filename

 

이 예에서 old는 대체하고자 하는 텍스트, newold를 대체할 새 텍스트임.

치환은 기본적으로 각 줄의 첫 번째 일치 항목에만 적용됨.


2-2. 삭제 (Delete) - d

d 명령어는 지정된 패턴 또는 행을 삭제하는 데 사용됨.

sed '/pattern/d' filename

이 예에서 pattern을 포함하는 모든 줄이 파일에서 삭제됨.


2-3. 출력 (Print) - p

p 명령어는 특정 패턴이 포함된 줄을 출력.
-n 옵션과 함께 사용될 때 유용합니다.

sed -n '/pattern/p' filename

 

이 명령은 pattern이 포함된 줄만 출력.
-n 옵션은 기본 출력을 억제하고, p 명령으로 명시적으로 요청된 줄만 출력하도록 허용함.


2-4. 추가 (Append) - a\\

a\\ 명령어는 지정된 텍스트를 새 줄로 추가.

sed '/pattern/a\\new line of text' filename

이 예에서 pattern을 포함하는 줄 바로 다음에 "new line of text"가 추가됨.


2-5. 삽입 (Insert) - i\\

i\\ 명령어는 주어진 텍스트를 특정 줄 위에 삽입.

sed '/pattern/i\\new line of text' filename

이 명령은 pattern을 포함하는 줄 바로 전에 "new line of text"를 삽입.


2-6. 변경 (Change) - c\\

c\\ 명령어는 특정 줄 전체를 새로운 텍스트로 변경.

sed '/pattern/c\\new text' filename

이 명령은 pattern을 포함하는 줄을 "new text"로 완전히 대체 변경됨.


2-7. 다음 줄 읽기 (Next) - n

n 명령어는 다음 입력 줄을 읽고, 패턴 스페이스에 저장 후 즉시 다음 명령으로 넘어감.

sed 'n;d' filename

 

  1. sed 명령어가 filename 파일을 열어 한 줄씩 읽습니다.
  2. n 명령으로 다음 줄로 이동합니다.
  3. d 명령으로 이전 줄(즉, 현재 처리 중인 줄)을 삭제합니다.

결과적으로 이 명령어는 filename 파일의 모든 홀수 번째 줄을 삭제하고 짝수 번째 줄만 출력하는 효과를 가짐.


2-8. 분기 (Branch) - b

b 명령어는 특정 조건이 충족될 때 스크립트의 다른 부분으로 점프(분기)함.

이를 통해 sed에서 루프 또는 조건부 실행을 구현할 수 있음.

sed '10b' example.txt
  • 위 명령은 10번째 줄을 만나면 나머지 스크립트를 실행하지 않고 다음 줄로 넘어갑니다.
sed -n '{
  /pattern1/ b skip
  p
  :skip
  /pattern2/ p
}' example.txt
  • 이 스크립트는 "pattern1"이 있는 줄을 만나면
  • skip 레이블로 점프(branching)하여
  • 첫 번째 p 명령을 건너뛰고, "pattern2"가 있는 줄만 출력

2-9. 레이블 (Label) - :

branch 명령에서 사용할 label을 스크립트 내에 지정함.

sed ':label'

label 이라는 label을 설정.


2-10. 줄 번호 출력 - =

= 명령은 패턴 버퍼의 현재 줄 번호를 표준 출력으로 보내는 간단한 기능을 수행.

  • -n 옵션과 함께 사용되지 않는 한, 원본 데이터와 함께 줄 번호도 출력되므로
  • 주로 -n 옵션과 함께 사용하여 특정 조건에 맞는 줄의 번호만을 출력하는 데 활용됩니다.
sed -n '/pattern/d; =' example.txt
  • 이 명령은 "pattern"을 포함하는 줄을 삭제하고, 남은 모든 줄의 번호를 출력
  • 여기서 -n 옵션은 모든 출력을 기본적으로 억제하고, = 명령에 의해서만 줄 번호가 출력되도록 함.