맨위로가기

Sed (유틸리티)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

sed는 텍스트 스트림 편집을 위해 개발된 유닉스 명령어 유틸리티이다. 텍스트 파일의 명령줄 처리를 위해 설계되었으며, 정규 표현식을 사용하여 텍스트를 검색하고 치환하는 기능을 제공한다. sed는 다양한 명령어를 통해 텍스트 변환, 필터링, 파일 수정 등의 작업을 수행하며, 셸 스크립트에서 널리 활용된다. GNU sed, minised 등 여러 변형이 존재하며, 홀드 공간을 활용하여 복잡한 텍스트 처리도 가능하다.

더 읽어볼만한 페이지

  • 콘솔 애플리케이션 - MS-DOS 편집기
    MS-DOS 편집기는 MS-DOS 운영 체제에 포함된 텍스트 편집기로, 다중 문서 인터페이스, 이진 파일 모드, 마우스 지원 기능을 제공하며, 다양한 버전으로 출시되었다.
  • 콘솔 애플리케이션 - Top (소프트웨어)
    top은 시스템의 실시간 상태를 보여주는 프로세스 모니터링 소프트웨어 유틸리티로, CPU 사용률, 메모리 사용량, 실행 중인 프로세스 목록 등 다양한 정보를 제공한다.
  • 패턴 매칭 프로그래밍 언어 - AWK
    AWK는 1977년에 개발된 텍스트 처리 및 프로그래밍 언어로, 유닉스 환경에서 텍스트 처리를 위해 설계되었으며 정규 표현식 처리 기능을 통해 텍스트 분석, 데이터 추출, 보고서 생성 등 다양한 작업을 수행한다.
  • 패턴 매칭 프로그래밍 언어 - 하스켈
    하스켈은 해스켈 커리의 이름을 딴 순수 함수형 프로그래밍 언어로, 여러 함수형 언어 통합 노력의 결과로 탄생하여 느긋한 계산법, 패턴 매칭, 타입 클래스, 모나드 등의 특징을 가지며 GHC가 표준 구현체로 사용된다.
  • 텍스트 지향 프로그래밍 언어 - Tcl
    Tcl은 존 오스터하우트가 개발한 명령어 기반의 프로그래밍 언어로, Tk 툴킷과 결합하여 GUI 스크립팅 환경으로 발전했으며, 다양한 운영체제에서 사용 가능하고 C, C++, Java 등 다른 언어와의 인터페이스를 지원한다.
  • 텍스트 지향 프로그래밍 언어 - PHP
    PHP는 라스무스 러도프가 개발한 범용 스크립팅 언어로, 웹 개발에 널리 사용되며 LAMP 아키텍처의 핵심 요소이다.
Sed (유틸리티) - [IT 관련 정보]에 관한 문서
일반 정보
GNU sed의 매뉴얼 발췌
Sed stream editor cropped1.jpg
종류스크립트 언어
설계자리 E. 맥마흔
개발 언어C
영향ed
영향을 준 언어
AWK
발표일1974년

2. 역사

버전 7 유닉스에서 처음 등장한 sed는 데이터 파일의 명령 줄 처리를 위해 개발된 초기 유닉스 명령어 중 하나로, 대중적인 grep 명령어의 뒤를 자연스럽게 이었다.[16] 원래는 치환을 목적으로 한 grep(g/re/p)의 상이형인 "g/re/s"이었다.[17] 맥마흔은 개별 명령어를 위해 추가적인 특수 목적의 프로그램들이 등장할 것으로 예견하고, 범용 목적의 라인 지향 스트림 편집기를 작성하였으며, 이것이 sed가 되었다.[16] sed의 구문, 특히 패턴 매칭/를 사용하고 치환에 s///를 사용하는 것은 당시 널리 사용되던 sed의 전신인 ed에서 유래되었으며,[3] 정규 표현식 구문은 ECMAScript와 Perl을 포함한 다른 언어에 영향을 미쳤다. 나중에 더 강력한 언어인 AWK가 개발되었고, 이들은 사촌처럼 작동하여 셸 스크립트로 강력한 텍스트 처리를 수행할 수 있게 했다. sed와 AWK는 종종 Perl의 선구자이자 영감으로 인용되며, 특히 일치 및 치환 연산자에서 Perl의 구문과 의미에 영향을 미쳤다.

GNU sed는 파일의 제자리 편집을 포함한 몇 가지 새로운 기능을 추가했다. ''Super-sed''는 Perl과 호환되는 정규 표현식을 포함하는 sed의 확장 버전이다. 에릭 S. 레이몬드가 4.1BSD sed에서 역설계했고 현재 르네 레베가 유지 관리하는 ''minised''는 sed의 또 다른 변형이다. minised는 GNU 프로젝트가 새로운 GNU 정규 표현식 라이브러리를 기반으로 한 새로운 버전의 sed를 작성할 때까지 GNU 프로젝트에서 사용되었다. 현재 minised는 BSD sed에 대한 몇 가지 확장을 포함하지만 GNU sed만큼 기능이 풍부하지 않다. 장점은 매우 빠르고 메모리를 적게 사용한다는 것이다. 임베디드 시스템에서 사용되며 Minix와 함께 제공되는 sed 버전이다.[5]

3. 사용법

sed는 텍스트 편집기로, 주로 텍스트 치환에 사용된다.
기본 사용법```bash

sed 's/정규표현식/대체문자열/g' 입력파일명 > 출력파일명

```


  • `s`: 치환(substitute)을 의미한다.
  • `g`: 전역(global) 치환을 의미하며, 줄에서 일치하는 모든 항목을 대체한다. 생략하면 첫 번째 일치 항목만 대체된다.
  • `/`: 구분 기호. 관례적으로 슬래시(`/`)를 사용하지만, 다른 기호를 사용해 가독성을 높일 수 있다.

예시`input.txt` 파일에서 "foo"를 찾아 "bar"로 모두 바꾸고, `output.txt` 파일에 저장하는 명령어는 다음과 같다.

```bash

sed "s/foo/bar/g" input.txt > output.txt

```
정규 표현식 활용정규 표현식을 사용하면 더 복잡한 패턴을 찾고 바꿀 수 있다.
필터로서의 사용sed는 유닉스 파이프라인에서 필터로 자주 사용된다.[11]

```bash

$ echo xyz xyz | sed 's/x/y/g'

yyz yyz

```

위 예시는 "xyz xyz" 문자열에서 "x"를 "y"로 바꾼다.
파일 기반 sed 스크립트여러 sed 명령어를 스크립트 파일에 넣어 한 번에 실행할 수 있다.

```bash

sed -f subst.sed inputFileName > outputFileName

```
제자리 편집GNU sed의 `-i` 옵션을 사용하면 파일을 직접 수정할 수 있다.[1]

```bash

sed -i 's/abc/def/' 파일이름

```

이 명령어는 지정된 '파일이름'의 내용을 직접 변경한다.

3. 1. 치환 명령어

sed의 가장 일반적인 사용법은 치환 명령어(`s///`)를 사용하는 것이다.[16][3] 다음은 사용 형식이다.

```bash

sed 's/정규표현식/대체문자열/g' 입력파일명 > 출력파일명

```

  • `s`: 치환(substitute)을 의미한다.
  • `g`: 전역(global) 치환을 의미하며, 줄에서 일치하는 모든 항목을 대체한다. `g`를 생략하면 첫 번째 일치 항목만 대체된다.
  • 첫 번째 구분 기호 뒤: 검색할 정규 표현식이 온다.
  • 두 번째 구분 기호 뒤: 대체 문자열이 온다.
  • 구분 기호: 관례적으로 슬래시(`/`)를 사용하지만, 패턴이나 대체 문자열에 슬래시가 없다면 다른 기호를 사용해 가독성을 높일 수 있다. 이는 "기울어진 이쑤시개 증후군"을 피하는 데 유용하다.


치환 명령어는 ed의 검색 및 바꾸기 기능에서 유래했으며, 간단한 구문 분석 및 템플릿 언어를 구현한다.

  • 정규 표현식: 패턴 일치 및 하위 표현식을 통해 텍스트를 저장할 수 있다.
  • 대체 문자열: 리터럴 텍스트이거나 다음을 포함할 수 있다.
  • `&`: "전체 일치"를 나타낸다.
  • `\1`부터 `\9`까지: ''n''번째 저장된 하위 표현식을 나타내는 특수 이스케이프 시퀀스이다.


예시: `sed -r "s/(cat|dog)s?/\1s/g"`는 "cat" 또는 "dog"의 모든 항목을 "cats" 또는 "dogs"로 대체하며, 기존의 "s"는 중복되지 않는다. 여기서 `(cat|dog)`는 첫 번째(그리고 유일한) 저장된 하위 표현식이며, `\1`은 대체 문자열에서 이 하위 표현식으로 대체된다.

`s/검색 패턴/대체 문자열/g` 형식에서:

  • `s` 다음의 문자는 검색 패턴과 대체 문자열의 구분 기호이다. (예: `/`)
  • 검색 문자열은 정규 표현식으로 지정한다. 정규 표현식에 구분 기호가 포함된 경우 `\` 문자를 앞에 붙여 이스케이프해야 한다. (예: `/`가 구분 기호일 때 `/`를 검색하려면 `\/`로 지정)
  • 대체 문자열에서 `&` 문자와 `\` 문자는 특별한 의미를 가진다.
  • `&`는 일치하는 문자열로 대체된다. `&` 자체로 대체하려면 `\&`로 지정한다.
  • `\` 자체로 대체하려면 `\\`로 지정한다.
  • `/`가 구분 기호일 때 `/`로 대체하려면 `\/`로 지정한다.

3. 2. 기타 sed 명령어

치환 외에도 25개의 sed 명령을 사용하여 다른 형태의 처리가 가능하다. 예를 들어, 다음은 `d` 명령어를 사용하여 비어있거나 공백만 포함하는 줄을 삭제하는 예시이다.

```bash

sed '/^ *$/d' inputFileName

```

이 예제는 다음과 같은 일부 정규 표현식 메타문자를 사용한다(sed는 정규 표현식의 전체 범위를 지원한다).

  • 캐럿(`^`)은 줄의 시작 부분을 일치시킨다.
  • 달러 기호(`$`)는 줄의 끝 부분을 일치시킨다.
  • 별표(`*`)는 이전 문자의 0회 이상 발생을 일치시킨다.
  • 더하기(`+`)는 이전 문자의 한 번 이상 발생을 일치시킨다.
  • 물음표(`?`)는 이전 문자의 0회 또는 1회 발생을 일치시킨다.
  • (`.`)은 정확히 하나의 문자를 일치시킨다.


복잡한 sed 구문도 가능하며, 이를 통해 간단하지만 매우 특화된 프로그래밍 언어로 사용할 수 있다. 예를 들어, 레이블(콜론 다음에 문자열이 오는 형식)과 분기 명령 `b`와 조건부 분기 `t`를 사용하여 제어 흐름을 관리할 수 있다. 유효한 레이블 이름 다음에 오는 명령 `b`는 해당 레이블 다음의 명령으로 처리를 이동시킨다. `t` 명령은 이전 `t` (또는 처음 `t`를 만난 경우 프로그램 시작 부분) 이후에 치환이 성공한 경우에만 그렇게 한다. 또한 `{` 명령은 명령의 시퀀스(해당 `}`까지)를 시작한다. 대부분의 경우 주소 패턴에 의해 조건이 지정된다.

3. 3. 필터로서의 사용

유닉스에서 sed는 종종 파이프라인에서 필터로 사용된다.[11]

"generateData"와 같은 프로그램이 데이터를 생성하고, sed는 ''x''를 ''y''로 바꾸는 작은 변경을 수행한다.[11] 예를 들어, 다음과 같다.

```bash

$ echo xyz xyz | sed 's/x/y/g'

yyz yyz

```[11]

3. 4. 파일 기반 sed 스크립트

여러 sed 명령어를 `subst.sed`와 같은 스크립트 파일 안에 한 줄에 하나씩 넣으면 유용할 수 있으며, `-f` 옵션을 사용하면 파일로부터 `s/x/y/g`와 같은 명령을 실행할 수 있다.

```bash

sed -f subst.sed inputFileName > outputFileName

```

스크립트 파일을 사용하면 셸 이스케이프나 치환 관련 문제를 피할 수 있다.

shebang 라인을 추가하고, 파일에 실행 권한을 할당하여 스크립트 파일을 명령 줄에서 직접 실행할 수 있다. 예를 들어, `subst.sed` 파일을 다음과 같이 만들 수 있다.

```sed

#!/bin/sed -f

s/x/y/g

```

그런 다음 `chmod` 명령어를 사용하여 현재 사용자가 파일을 실행 가능하게 만들 수 있다.

```bash

chmod u+x subst.sed

```

이제 파일은 명령줄에서 직접 실행할 수 있다.

```bash

subst.sed inputFileName > outputFileName

3. 5. 제자리 편집

GNU sed의 `-i` 옵션을 사용하면 파일을 직접 수정할 수 있다. 예를 들어 다음과 같다.

```bash

sed -i 's/abc/def/' 파일이름

```

GNU sed의 `-i` 옵션을 사용하면 파일을 직접 편집할 수 있지만, 실제로는 백그라운드에서 임시 출력 파일을 생성한 다음 원본 파일이 임시 파일로 대체되는 방식으로 작동한다.[1]

4. sed 스크립트의 기본 문형

sed 스크립트는 주소와 명령어를 나란히 작성하여 입력 데이터의 행을 지정하고 처리한다.[15] 주소는 행 번호 또는 정규 표현식 패턴으로 지정할 수 있다.

```text

주소1 명령어1

주소2 명령어2

주소3 명령어3

...

```

sed는 "주소로 지정된 조건을 만족하는 입력 데이터 행을, 명령어로 처리하여 출력한다"는 동작을 반복한다. 주소 지정을 생략하면 모든 행에 명령어가 적용된다.

sed는 데이터를 한 행씩 읽어 '''패턴 공간'''에 저장하고, 패턴 공간의 데이터에 대해 스크립트를 순서대로 평가한다. 스크립트 실행이 끝나면 패턴 공간에 데이터가 남아있을 때 내용을 출력하고 다음 입력 데이터 처리를 시작한다. 조건에 따라 다음 행을 읽거나, '''홀드 공간'''이라는 별도의 버퍼에 보관하여 후속 읽기와 합성할 수 있다. 이를 통해 형식 변환이나 특정 문맥 패턴 추출 등 고도화된 처리가 가능하다. sed는 튜링 완전성을 가진 언어이다.

4. 1. 주소와 명령어

sed 스크립트는 주소와 명령어를 나란히 작성한다.[15] 주소는 입력 데이터의 행을 지정하는 것으로, 행 번호 또는 정규 표현식 패턴을 의미한다.

```text

주소1 명령어1

주소2 명령어2

주소3 명령어3

...

```

sed는 "주소로 지정된 조건을 만족하는 입력 데이터 행을, 명령어로 처리하여 출력한다"는 동작을 반복한다. 주소 지정을 생략하면 모든 행에 명령어가 적용된다.

예를 들어 아래 스크립트는 입력 데이터의 10번째 행만 출력한다.

```text

10 p

d

```

sed는 데이터를 한 행씩 읽어 '''패턴 공간'''에 저장하고, 패턴 공간의 데이터에 대해 스크립트를 순서대로 평가한다. 먼저 "10 p"를 평가하여 입력 데이터(패턴 공간)의 행 번호가 10이면 `p` 명령어로 패턴 공간의 데이터를 출력한다. 그 후 "d"를 평가하여 행 번호나 내용에 관계없이 `d` 명령어를 적용해 패턴 공간의 데이터를 삭제한다. sed는 스크립트 끝에 도달하면 패턴 공간에 데이터가 남아있을 때 내용을 출력하고 다음 입력 데이터 처리를 시작한다. 이 스크립트에서는 두 번째 행에서 패턴 공간의 데이터가 삭제되므로 출력 없이 다음 입력 데이터 처리를 시작한다.

조건에 따라 다음 행을 읽거나, '''홀드 공간'''이라는 버퍼에 보관하여 후속 읽기와 합성할 수 있다. 이를 통해 형식 변환이나 특정 문맥 패턴 추출 등 고도화된 처리가 가능하다. sed는 튜링 완전성을 가진 언어이다.

4. 2. y 명령어

`y/검색 문자/치환 문자/` 형식으로 사용하며, 패턴 공간의 한 문자를 검색하고 치환한다. 이는 한 문자 단위로 검색 치환을 수행하므로 문자열(단어 등)에는 사용할 수 없다.[1] 또한, sed 스크립트에서는 슬래시(`/`)로 둘러싸인 문자 또는 문자열을 대상으로 하므로, 마지막 슬래시를 생략하면 오류가 발생한다.[1]

`y/○/●/`

`y/△/▲/`

`y/□/■/`

와 같이 기술하면, ○→●, △→▲, □→■ 와 같이 한 글자씩 치환한다.[1]

하지만 이는 다음과 같이 한 줄로 정리할 수 있어 스크립트의 행 수를 줄일 수 있다.[1]

`y/○△□/●▲■/`

`y` 명령어는 처음부터 일대일로 실행하기 때문에,[1]

`y/○△□/●/`

와 같이 앞과 뒤의 글자 수가 맞지 않는 경우에는 오류가 발생한다.[1]

4. 3. s 명령어

sed의 가장 일반적인 사용법 중 하나는 's' 명령어를 사용한 치환이다. 이 명령어의 기본 형식은 다음과 같다.[16][3]

```bash

sed 's/정규표현식/대체문자열/g' 입력파일명 > 출력파일명

```

여기서 's'는 치환(substitute)을 의미하며, 'g'는 전역(global)을 의미한다. 'g' 플래그는 해당 줄에서 패턴과 일치하는 모든 항목을 대체하도록 한다. 일부 sed 버전에서는 표현식 앞에 `-e` 옵션을 추가해야 할 수도 있다.

명령어의 구조는 다음과 같다.

  • `s`: 치환 명령을 나타낸다.
  • `/`: 구분 기호. 관례적으로 슬래시(`/`)를 사용하지만, 패턴이나 대체 문자열에 슬래시가 포함되지 않는다면 다른 기호를 사용하여 가독성을 높일 수 있다.
  • `정규표현식`: 검색할 패턴을 나타낸다. 정규 표현식을 사용하여 복잡한 패턴을 지정할 수 있다.
  • `대체문자열`: 검색된 패턴을 대체할 문자열을 나타낸다.
  • `g`: 전역 치환 플래그. 이 플래그가 없으면 줄에서 첫 번째로 일치하는 패턴만 대체된다.


대체 문자열에서는 `&` 문자와 `\` 문자가 특별한 의미를 가진다.

  • `&`: 일치하는 전체 문자열을 나타낸다.
  • `\1` ~ `\9`: 정규 표현식 내에서 괄호로 묶인 하위 표현식(subexpression)을 참조한다. 예를 들어, `\1`은 첫 번째 하위 표현식, `\2`는 두 번째 하위 표현식을 나타낸다.


예를 들어, `sed -r "s/(cat|dog)s?/\1s/g"` 명령어는 "cat" 또는 "dog"를 "cats" 또는 "dogs"로 대체한다. 여기서 `(cat|dog)`는 첫 번째 하위 표현식이며, `\1`은 이 하위 표현식을 대체 문자열에서 참조하여 "s"를 추가한다.

요약하자면 `s/검색 패턴/대체 문자열/g` 형식으로 단어, 문장 등과 일치하는 패턴을 검색하고 대체할 수 있다. 끝에 `g`를 지정하면 검색 패턴과 일치하는 모든 문자열을 대체한다. 검색 문자열은 정규 표현식으로 지정하며, 대체 문자열에서 `&` 문자와 `\` 문자는 특별한 의미를 갖는다.[3]

4. 4. 홀드 공간의 이용

sed에서 홀드 공간은 패턴 공간 외에 별도로 존재하는 버퍼이다. `g`, `G`, `h`, `H`, `x` 명령어를 사용하여 홀드 공간과 패턴 공간 간의 데이터 이동을 제어한다.

  • `g`: 패턴 공간에 홀드 공간의 내용을 복사한다. 원래 패턴 공간의 내용은 덮어쓰기로 지워진다.
  • `G`: 패턴 공간의 마지막에 홀드 공간의 내용을 추가한다. 패턴 공간의 마지막 줄 바꿈은 유지된다.
  • `h`: 패턴 공간의 내용을 홀드 공간에 복사한다. 원래 홀드 공간의 내용은 덮어쓰기로 지워진다.
  • `H`: 패턴 공간의 내용을 홀드 공간의 마지막에 복사한다.
  • `x`: 패턴 공간의 내용과 홀드 공간의 내용을 교체한다.


홀드 공간을 이용하면 형식 변환이나 특정 문맥 패턴을 추출하는 등, 여러 줄에 걸친 복잡한 텍스트 처리가 가능하다.[15]

5. 명령 줄에서의 실행

본 셸이나 C 셸에서 특정 sed 스크립트를 단독으로 사용하는 경우 다음과 같이 입력한다. 작은따옴표(')는 와일드카드 등 셸의 특수 문자를 셸이 해석하지 않도록 하기 위해 사용한다.



sed -e 's/검색 문자열/대체 문자열/g' 입력.txt > 출력.txt



sed영어에서 `-e` 옵션은 다음에 오는 문자열을 스크립트로 처리하도록 지정한다. `입력.txt` 내에서 검색 조건과 일치하는 모든 문자열을 처리하여 `출력.txt` 파일로 출력한다.[1]

미리 준비한 스크립트 파일을 읽어들이려면 다음과 같이 입력한다.



sed -f 스크립트.sed 입력.txt > 출력.txt



`-f` 옵션은 파일에서 명령을 읽어 처리하도록 지정한다. 스크립트 파일 `스크립트.sed` 안에 기술된 명령을 순서대로 읽어들여, `입력.txt` 내에서 검색 조건과 일치하는 모든 문자열을 처리하여 `출력.txt` 파일로 출력한다.[1]

GNU sed에 도입된 `-i` 옵션을 사용하면 파일을 직접 수정할 수 있다.



sed -i 's/abc/def/' fileName


6. 특징

sed는 데이터 파일의 명령 줄 처리를 위해 개발된 초기 유닉스 명령어 중 하나로, 비대화형 텍스트 편집기이다. 여러 파일을 일괄 처리할 수 있어 작업 속도가 빠르고 생산성이 높다.

프로그램 소스 코드나 HTML 파일 내의 하이퍼링크를 일괄적으로 수정하는 데 사용된다. 또한 일반적인 문장의 오기나 표기 불일치 등을 일괄적으로 수정하는 용도로도 사용되며, 예를 들어 일본어 데이터의 경우 정규 표현식을 사용하여 보내 가나를 포함한 문장의 처리에 사용된다.

현재는 Windows나 Macintosh 등에도 이식되었다. 기본적으로 명령 줄 도구이지만, 이러한 OS용 버전에서는 사용자가 CUI(명령 줄 인터페이스)에 익숙하지 않은 점을 고려하여 최근에는 GUI로 다룰 수 있는 도구도 제공되기 시작했다.

7. 튜링 완전성

sed의 명령어 언어는 "홀드 공간"과 "패턴 공간"이라는 두 개의 변수와 GOTO와 유사한 분기 기능만을 가지고 있다.[6][7] 그럼에도 불구하고, 이 언어는 튜링 완전성을 가지며, 난해한 프로그래밍 언어로서 소코반, 아르카노이드,[8] 체스,[9] 테트리스[10]와 같은 게임을 위한 sed 스크립트가 존재한다.

8. 한계 및 대안

sed는 간단하고 제한적이지만, 많은 목적에 충분히 강력하다. 더 정교한 처리를 위해서는 AWK나 Perl과 같은 더 강력한 언어를 대신 사용할 수 있다. 이러한 언어들은 정규 표현식 추출 및 템플릿 교체보다 더 복잡한 방식으로 줄을 변환해야 할 때 특히 사용된다. 하지만 보류 버퍼를 사용하면 임의로 복잡한 변환도 원칙적으로 가능하다.

반대로, 더 간단한 작업의 경우, grep(패턴과 일치하는 줄 인쇄), head (파일의 첫 부분을 인쇄), tail (파일의 마지막 부분을 인쇄), tr (문자 변환 또는 삭제)와 같은 특수 유닉스 유틸리티가 더 선호되는 경우가 많다. 이러한 특수 유틸리티는 설계된 특정 작업에 대해 sed와 같은 더 일반적인 솔루션보다 일반적으로 더 간단하고, 명확하며, 빠르다.

ed/sed 명령어와 구문은 텍스트 편집기 vi 및 vim과 같은 파생 프로그램에서도 계속 사용된다. ed/sed의 유사체로는 sam/ssam이 있는데, sam은 플랜 9 편집기이고, ssam은 이에 대한 스트림 인터페이스로 sed와 유사한 기능을 제공한다.

9. 예제

sed는 텍스트 처리를 위한 다양한 기능을 제공하며, 간단한 명령어를 조합하여 복잡한 작업도 수행할 수 있다.
예시:


  • 파일에서 특정 단어를 "REDACTED"로 바꾸고 결과를 저장:[1]


```shell

sed -i "s/yourpassword/REDACTED/" ./status.chat.log

```

  • "yourword"라는 단어가 포함된 모든 줄을 삭제:[1]


```sed

/yourword/ d

```

  • "yourword" 단어의 모든 인스턴스를 삭제:[1]


```sed

s/yourword//g

```

  • 파일에서 두 단어를 동시에 삭제 (세미콜론(`;`)을 사용하여 한 줄로 표현):[1]


```shell

sed "s/firstword//g; s/secondword//g" inputFileName

9. 1. Hello, world! 예제

다음은 입력 텍스트 스트림을 "Hello, world!"로 변환하는 예제이다.



s/.*/Hello, world!/

q



이 “Hello, world!" 스크립트는 파일(예: script.txt)에 있으며, `sed -f script.txt inputFileName`과 같이 호출한다. 여기서 "inputFileName"은 입력 텍스트 파일이다. 이 스크립트는 "inputFileName"의 첫 번째 줄을 "Hello, world!"로 변경한 다음 종료(q)되며, sed가 종료되기 전에 결과를 출력한다. 첫 번째 줄 이후의 모든 입력 줄은 읽혀지지 않고 출력되지 않으므로, 유일한 출력은 "Hello, world!"이다.

이 예제는 sed의 주요 특징을 보여준다.

  • 일반적인 sed 프로그램은 매우 짧고 간단하다.
  • sed 스크립트는 주석(`#` 기호로 시작하는 줄)을 가질 수 있다.
  • `s`(대체) 명령어는 sed의 가장 중요한 명령어이다.
  • sed는 `q`(종료)와 같은 간단한 프로그래밍을 허용한다.
  • sed는 `.*`(임의의 문자가 0개 이상)과 같은 정규 표현식을 사용한다.

9. 2. 기타 간단한 예제

파일에서 특정 단어의 모든 인스턴스를 "REDACTED"로 바꾸고 (예: IRC 암호) 결과를 저장하려면 다음과 같이 한다.



$ sed -i "s/yourpassword/REDACTED/" ./status.chat.log



"yourword"라는 단어가 포함된 모든 줄을 삭제하려면(''주소''는 '/yourword/') 다음과 같이 한다.



/yourword/ d



"yourword" 단어의 모든 인스턴스를 삭제하려면 다음과 같이 한다.



s/yourword//g



파일에서 두 단어를 동시에 삭제하려면 다음과 같이 한다.



s/firstword//g

s/secondword//g



이전 예제를 명령줄에서 입력할 때와 같이 한 줄로 표현하려면 두 명령을 세미콜론으로 결합할 수 있다.



$ sed "s/firstword//g; s/secondword//g" inputFileName


9. 3. 여러 줄 처리 예제

두 번째 줄이 공백 하나로 시작하는 문장에서 줄 바꿈을 제거하는 예제는 다음과 같다.[1]

입력 파일(`inputFileName`)에 다음과 같은 텍스트가 있다고 가정한다.

```text

This is my dog,

whose name is Frank.

This is my fish,

whose name is George.

This is my goat,

whose name is Adam.

```

아래의 `sed` 스크립트를 사용하면, 공백으로 시작하는 줄의 줄바꿈이 제거되어 다음과 같이 변경된다.

```text

This is my dog, whose name is Frank.

This is my fish,

whose name is George.

This is my goat, whose name is Adam.

```

사용된 스크립트는 다음과 같다.[1]

```text

N

s/\n / /

P

D

```

각 명령어에 대한 설명은 다음과 같다.[1]

  • `N`: 다음 줄을 패턴 공간에 추가한다.
  • `s/\n / /`: 줄바꿈 뒤에 공백이 오는 패턴을 찾아 공백 하나로 바꾼다.
  • `P`: 패턴 공간의 첫 번째 줄을 출력한다.
  • `D`: 패턴 공간의 첫 번째 줄을 삭제하고 스크립트를 다시 실행한다.


위 스크립트는 세미콜론(`;`)을 사용하여 한 줄로 표현할 수 있다.[1]

```bash

sed 'N; s/\n / /; P; D' inputFileName

참조

[1] 웹사이트 The sed FAQ, Section 2.1 http://sed.sourcefor[...] 2013-05-21
[2] 웹사이트 The sed FAQ, Section 2.2 http://sed.sourcefor[...] 2013-05-21
[3] 웹사이트 On the Early History and Impact of Unix http://www.columbia.[...]
[4] 간행물 A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 http://www.cs.dartmo[...]
[5] 웹사이트 tar-mirror/minised: A smaller, cheaper, faster SED implementation https://github.com/t[...] 2024-05-20
[6] 웹사이트 Implementation of a Turing Machine as Sed Script http://sed.sourcefor[...] 2003-04-24
[7] 웹사이트 Turing.sed http://sed.sourcefor[...] 2003-04-24
[8] 웹사이트 The $SED Home - gamez http://sed.sourcefor[...]
[9] 웹사이트 bolknote/SedChess https://github.com/b[...] 2013-08-23
[10] 웹사이트 Sedtris, a Tetris game written for sed https://github.com/u[...] 2016-10-03
[11] 문서
[12] 웹사이트 In the Beginning: Unix at Bell Labs http://www.princeton[...] Michael S. Mahoney Professor of Princeton University 2023-02-05
[13] 웹사이트 What is sed? The sed FAQ https://www.pement.o[...] Eric Pement 2023-02-05
[14] 웹사이트 Netizens On the History and Impact of the Net /Netizens: An Anthology CHAPTER 9 http://www.columbia.[...] Jay & Ronda Hauben 2023-02-05
[15] 웹사이트 GNU sed manual https://www.gnu.org/[...] gnu.org 2023-02-05
[16] 웹인용 On the Early History and Impact of Unix http://www.columbia.[...] 2017-09-12
[17] 기술보고서 A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 http://www.cs.dartmo[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com