sed (stream editor) 사용법
sed
(Stream Editor)는
- text stream을 처리하고 변형하는 데 사용되는
- 매우 강력한 command based editor.
- 처리를 명령어로 구성된 script로 지정함.
2024.05.11 - [Linux] - [Linux] sed vs. ed vs. vi : 텍스트 편집 도구 비교
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
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
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
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
1-6. -E
- 용도:
-r
과 유사하게 확장 정규 표현식을 사용할 수 있도록 해주는 옵션으로, GNUsed
에서 사용됨.- 현재 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(|)와 다중 명령어 (;, &&, ||)
2-1. 치환 (Substitute) - s
가장 일반적으로 사용되는 sed
명령어는 s
임.
이 명령어는 패턴을 찾아 다른 텍스트로 치환하는 데 사용됨.
sed 's/old/new/' filename
이 예에서 old
는 대체하고자 하는 텍스트, new
는 old
를 대체할 새 텍스트임.
치환은 기본적으로 각 줄의 첫 번째 일치 항목에만 적용됨.
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
- sed 명령어가 filename 파일을 열어 한 줄씩 읽습니다.
- n 명령으로 다음 줄로 이동합니다.
- 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
옵션은 모든 출력을 기본적으로 억제하고,=
명령에 의해서만 줄 번호가 출력되도록 함.
'Linux' 카테고리의 다른 글
[linux] example: sed: -e option (0) | 2024.05.11 |
---|---|
[linux] example: sed: -n option (0) | 2024.05.11 |
[Linux] sed vs. ed vs. vi : 텍스트 편집 도구 비교 (0) | 2024.05.11 |
[linux] Gateway ip address 확인: Ubuntu (1) | 2024.02.06 |
[zsh] 환경변수 사용하기: Referencing Environment Variable (0) | 2024.01.29 |