본문 바로가기

Linux Unix/Command

[ 리눅스 / Linux ] Sed 사용하기

반응형

sed는 Linux에서 강력한 스트림 편집기(스트림 에디터)로, 텍스트를 대량으로 처리하고 편집하는 데 매우 유용합니다. sed를 사용하면 파일의 내용을 변경하거나 텍스트 스트림에서 데이터를 수정할 수 있습니다. sed는 주로 명령줄에서 사용되며, 정규 표현식과 결합하여 복잡한 텍스트 변환 작업을 수행할 수 있습니다.

sed의 기본 사용법

sed 명령은 일반적으로 다음 형식으로 사용됩니다:

sed [옵션] '명령' [파일]
  • [옵션]: sed 명령에 대한 다양한 옵션입니다.
  • '명령': 수행할 작업을 정의하는 sed 명령입니다.
  • [파일]: 입력 파일입니다. 파일을 지정하지 않으면 sed는 표준 입력(STDIN)을 사용합니다.

주요 옵션

  • -e: 여러 명령을 사용할 때 사용합니다.
  • -i: 파일을 직접 수정할 때 사용합니다. -i.bak 형식으로 백업 파일을 만들 수 있습니다.
  • -n: 출력을 억제합니다. p 명령과 함께 사용할 때 유용합니다.
  • -r: 확장 정규 표현식을 사용합니다.

주요 명령어

  • s: 대체(substitute)
  • d: 삭제(delete)
  • p: 출력(print)
  • a: 추가(append)
  • i: 삽입(insert)
  • c: 치환(change)
  • y: 문자 변환(translate)

예제와 함께 살펴보는 sed 명령어

1. 텍스트 대체

텍스트 파일에서 특정 문자열을 다른 문자열로 대체할 수 있습니다.

sed 's/old_text/new_text/' file.txt
  • s/old_text/new_text/: old_textnew_text로 대체합니다.
  • file.txt: 입력 파일입니다.

예: file.txt에서 모든 helloworld로 대체합니다.

sed 's/hello/world/' file.txt

대체할 문자열이 여러 번 등장하는 경우, 모든 발생을 대체하려면 g 플래그를 추가합니다.

sed 's/hello/world/g' file.txt

2. 파일을 직접 수정

파일을 직접 수정하려면 -i 옵션을 사용합니다.

sed -i 's/old_text/new_text/' file.txt

백업 파일을 생성하면서 파일을 수정하려면:

sed -i.bak 's/old_text/new_text/' file.txt

3. 특정 줄에서 텍스트 대체

특정 줄에서만 대체를 수행할 수 있습니다.

sed '3s/old_text/new_text/' file.txt

위 명령은 file.txt의 3번째 줄에서 old_textnew_text로 대체합니다.

범위를 지정하여 여러 줄에서 대체할 수도 있습니다.

sed '2,4s/old_text/new_text/' file.txt

이는 2번째 줄부터 4번째 줄까지 old_textnew_text로 대체합니다.

4. 줄 삭제

특정 줄을 삭제할 수 있습니다.

sed '3d' file.txt

이는 file.txt의 3번째 줄을 삭제합니다.

범위를 지정하여 여러 줄을 삭제할 수도 있습니다.

sed '2,4d' file.txt

이는 2번째 줄부터 4번째 줄까지 삭제합니다.

특정 패턴과 일치하는 줄을 삭제하려면:

sed '/pattern/d' file.txt

이 명령은 file.txt에서 pattern과 일치하는 모든 줄을 삭제합니다.

5. 줄 출력

-n 옵션과 p 명령을 사용하여 특정 줄만 출력할 수 있습니다.

sed -n '3p' file.txt

이 명령은 file.txt의 3번째 줄만 출력합니다.

특정 패턴과 일치하는 줄을 출력하려면:

sed -n '/pattern/p' file.txt

이 명령은 pattern과 일치하는 모든 줄을 출력합니다.

6. 텍스트 추가

특정 줄 이후에 텍스트를 추가할 수 있습니다.

sed '3a\new line of text' file.txt

이 명령은 file.txt의 3번째 줄 이후에 new line of text를 추가합니다.

특정 줄 이전에 텍스트를 삽입하려면:

sed '3i\new line of text' file.txt

이 명령은 file.txt의 3번째 줄 이전에 new line of text를 삽입합니다.

7. 텍스트 치환

특정 줄을 다른 텍스트로 치환할 수 있습니다.

sed '3c\replacement text' file.txt

이 명령은 file.txt의 3번째 줄을 replacement text로 치환합니다.

8. 여러 명령 사용

여러 sed 명령을 한 번에 사용할 수 있습니다. -e 옵션을 사용하거나 세미콜론(;)으로 명령을 구분합니다.

sed -e 's/hello/world/' -e 's/foo/bar/' file.txt

또는

sed 's/hello/world/; s/foo/bar/' file.txt

9. 문자 변환

y 명령을 사용하여 한 문자 집합을 다른 문자 집합으로 변환할 수 있습니다.

sed 'y/abc/xyz/' file.txt

이 명령은 file.txt에서 ax로, by로, cz로 변환합니다.

실전 예제

예제 1: 텍스트 파일에서 이메일 주소 추출

텍스트 파일에서 이메일 주소를 추출하고 싶다면:

sed -n 's/.*\(.*@.*\..*\).*/\1/p' file.txt

이 명령은 파일에서 이메일 주소만 추출하여 출력합니다.

예제 2: 특정 패턴이 있는 줄 이후에 텍스트 추가

패턴 "START"가 있는 줄 이후에 "New line"을 추가하려면:

sed '/START/a\New line' file.txt

요약

sed는 텍스트 변환 및 편집을 자동화하는 데 매우 유용한 도구입니다. sed의 강력한 기능을 활용하면 파일에서 대량의 데이터를 효율적으로 처리할 수 있습니다. 다양한 옵션과 명령어를 조합하여 복잡한 텍스트 처리 작업을 간단하게 수행할 수 있습니다. sed 명령어를 사용하여 텍스트를 다룰 때, 위에서 설명한 예제들을 실습해보는 것이 좋습니다.

반응형