sed 명령어
sed는 Stream Editor의 약자로 원본 텍스트 파일을 편집하는데 유용한 명령어이다. 리눅스의 대표적인 편집기인 vi와의 공통점은 파일을 편집할 수 있다는 것이다. 하지만 차이점은 vi편집기는 편집기를 열어서 사용자와 소통하듯 수정/변경을 해나가는 것이며, sed명령어는 명령행에서 파일을 인자로 받아 명령어를 통해 작업 후 결과를 화면으로 확인하는 방식이다. 또한 vi 편집기는 실시간으로 원본 파일을 수정/변경/저장을 하게 되지만 sed 명령어는 파일을 인자로 받아 편집 작업을 거쳐 출력을 할 뿐이어서 원본 파일에 아무런 영향을 가하지 않는다는 것이다.
sed 명령어의 동작 과정
sed 명령어는 동작할 시 패턴 스페이스(Pattern Space)와 홀드 스페이스(Hold Space)라는 두 가지 버퍼가 사용된다. 패턴 버퍼는 sed 명령어가 파일을 라인 단위로 읽어 올 때 해당 라인을 임시로 저장하는 공간이다. sed 명령어가 파일의 출력이나 편집 등의 작업을 할 때 패턴 스페이스에 저장되어 있는 라인으로 작업을 하고 결과를 출력하기 때문에 원본 파일을 건드리지 않고 작업을 할 수 있는 것이다. 반면 홀드 스페이스는 패턴 스페이스보다 라인 단위를 더 길게 저장할 수 있는 공간이다. 즉 어떤 라인을 홀드 스페이스에 저장을 하면 sed 명령어가 다음 행을 읽더라도 나중에 원할 때 다시 불러와서 재사용할 수 있는 공간이라고 할 수 있다.
sed 명령어의 기본적인 문법 및 옵션
기본적인 문법 구조는 아래와 같다
sed [옵션] [스크립트] [파일명]
sub command(스크립트 부분)로 주로 사용되는 명령어
-p : 행을 출력한다.
-d : 행을 삭제한다.
-s : 문자열을 치환한다.
옵션으로 주로 사용되는 명령어
-e : 다중 편집을 가능하게 한다.
-n : 기본 출력을 생략한다.
sed 명령어의 사용 예제
#sed 명령어의 사용법을 확인할 시 사용할 file.txt내용
name phone birth sex score
reakwon 010-1234-1234 1981-01-01 M 100
sim 010-4321-4321 1999-09-09 F 88
nara 010-1010-2020 1993-12-12 M 20
1. 특정 범위만큼 파일 내용 출력하기
# 1-1 file.txt에서 첫 번째 라인만 출력하기
sed -n '1p' file.txt
↓
name phone birth sex score
# 1-2 file.txt에서 첫 번째 라인부터 세 번째 라인까지 출력하기
sed -n '1,3p' file.txt
↓
name phone birth sex score
reakwon 010-1234-1234 1981-01-01 M 100
sim 010-4321-4321 1999-09-09 F 88
# 1-3 file.txt에서 두 번째 라인부터 마지막 라인까지 출력하기
sed -n '2,$p' file.txt
↓
reakwon 010-1234-1234 1981-01-01 M 100
sim 010-4321-4321 1999-09-09 F 88
nara 010-1010-2020 1993-12-12 M 20
2. 특정 단어로 시작하는 행들만 추출하기
# 2-1 r로 시작하는 라인 출력하기
sed -n '/^r/p' file.txt
↓
reakwon 010-1234-1234 1981-01-01 M 100
# 2-2 na가 포함되어 있는 라인 출력하기
sed -n '/na/p' file.txt
↓
name phone birth sex score
nara 010-1010-2020 1993-12-12 M 20
3. 특정 단어 삭제하기
# 3-1 na가 포함되어 있는 라인 삭제하기
sed '/sim/d' file.txt
↓
name phone birth sex score
reakwon 010-1234-1234 1981-01-01 M 100
nara 010-1010-2020 1993-12-12 M 20
4. 특정 단어 치환하기
# 4-1 nara를 kimnara로 치환하기
sed 's/nara/kimnara/g' file.txt
↓
name phone birth sex score
reakwon 010-1234-1234 1981-01-01 M 100
sim 010-4321-4321 1999-09-09 F 88
kimnara 010-1010-2020 1993-12-12 M 20
'Linux' 카테고리의 다른 글
디스크 관리 및 파일 시스템 (0) | 2022.05.25 |
---|---|
awk 명령어 (0) | 2021.10.14 |
VI편집기 (0) | 2021.10.06 |
기본적인 Linux 명령어 (0) | 2021.09.02 |
Linux (0) | 2021.08.30 |