[리눅스 명령어] sed 사용법

[리눅스 명령어] sed 사용법

안녕하세요? 정리하는 개발자 워니즈 입니다. 이번시간에는 지난번 awk 에 이어서 리눅스 명령어 2편 sed에 대해서 정리해 보도록 하겠습니다.

awk 명령어(1/3)
sed 명령어(2/3)
cut 명령어(2/3)

1. sed 란?

sed는 Stream EDitor의 약자로 매우 컴팩트한 명령 체계를 이용하여 텍스트를 파싱하고 변형하는 (고대의) 텍스트 편집 도구이다. sed는 그 전신이 되는 ed의 스크립팅 체계를 기반으로 하고 있다. vim과 같이 편집될 텍스트를 화면상에 보면서 내용을 작성/수정하는 개념의 텍스트 편집기가 개발되기 이전의 텍스트 편집기이다.

일반적으로 에디터로 텍스트를 조작하려 할 때, 사람들이 주로 하는 방식은 다음과 같을 것입니다.

  1. 에디터를 켭니다.
  2. 편집할 텍스트파일을 다.
  3. 편집할 위치로 커서를 이동합니다.
  4. 내용을 수정합니다.
  5. 파일을 저장합니다.
  6. 에디터를 닫습니다.

그런데, 위의 과정을 SED로 진행하기 위해서는 다음이 필요합니다.

  • 텍스트 내용을 완벽히 알고 있어야한다.
  • 어느라인 혹은 어떤 내용을 수정할지 알고있어야 한다.
  • 스크립트를 활용해서 해당 라인을 수정한다.

2. sed 명령어 사용법

  • 기본

  • 옵션
옵션/스위치 별칭 기능
-n –quiet, –silent 읽어들인 라인을 암시적으로 자동출력하는 것을 중단한다.
-e –expression=script 실행될 명령에 스크립트를 추가한다
-f script_file –file=script_file 스크립트 파일의 내용을 가져와서 추가로 실행한다.
–follow-symlinks 제자리 처리시에 심볼릭 링크를 따르도록 한다. 하드링크는 깨진다.
-i[SUFFIX] –in-place[=SUFFIX] 파일을 제자리 처리한다. (즉 변경된 내용을 파일에 적용한다.)
-c 제자리 처리시에 사본을 이용한다.
-l N –copy 한줄의 길이를 정의한다.
–line-length=N 모든 GNU확장을 제외한다.–line-length=N
-r –posix 확장된 정규식 패턴을 사용한다.
-s –regexp-extended 파일을 하나의 긴 스트림이 아닌 분리된 데이터들로 처리한다.
-u –separate 입력으로부터 최소한의 내용만 읽고 더 자주 플러시한다.
도움말을 표시한다.

필자가 상위의 내용을 정리해두었지만, 사실 필자도 주로 사용하는 옵션은 -n,-e 정도 입니다. sed를 주로 치환용도로 많이 사용하다보니, 활용법을 잘 몰랐습니다.

이번 포스팅에 대한 정리를 sed에 대해서 심도 깊게 할 수 도있지만, 주로 활용법위주로 많이 해두어야 개발자 분들이 많이 가져다가 사용할 것 같습니다. 그래서 예시로 정리하겠습니다.

  • f 옵션도 자주 사용하는 것 같아서 정리합니다.

sed명령어의 -f(file)선택자를 사용하면 명령어를 일일이 키보드에서 입력하지 않고 하나의 파일에 기억시켜 놓고 사용할 수도 있다.

여러 개의 명령어를 연속적으로 자주 사용할 때 이 명령어 파일이 유용하게 사용된다.
예를 들어 다음과 같은 복수 개의 명령어가 파일에 기억되어 있는 경우는

다음과 같은 명령어를 입력하면 다음과 같이 출력된다.

  1. 치환

  1. 삭제

3. sed 예시

  • 치환 예시

  • 삭제 예시

  • 입/출력 예시

  • 필자가 사용했던 예시

4. 마치며

sed는 흔히 s///를 써서 특정한 파일이나 명령의 출력에서 특정 문자열을 치환하는 명령어로만 알았습니다. 하지만, sed 역시 편집기로 분류됩니다. 리눅스에서 아시다시피, 편집기하면 제일먼저 떠오르는것은 vim 입니다. 하지만, 그 이전 시대에는 sed를 많이 활용했던것 같습니다. 확실히 sed는 치환,삭제 등 라인의 변경에 대해서 유용하게 사용할 수 있을 것 같습니다.

-i 옵션을 사용하지 않는 이상 원본 파일에 되쓰는 일은 없습니다.
sed는 기본적으로 처리된 결과를 출력하는 일을 수행하며, 그 결과를 파일로 만들기 위해서는 주로 리다이렉션을 사용한다.

다음시간에는 cut 에 대해서 알아보는 시간을 갖도록 하겠습니다.

워니즈 블로그
워니즈 깃헙

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다