Sed(streamlined editor) : 정규식과 같은 패턴 식을 적용하여 파일을 원하는대로 편집할 수 있는 편집기이다.
vi 편집기처럼 실시간 수정이 아닌 커맨드 창 또는 스크립트에서 원하는 부분만 수정해서 보여주는 특징이 있다.
sed 명령어로 수정해도 원본에는 영향이 없습니다. (단, sed 옵션에서 -i 옵션을 사용하면 원본도 수정됨)
sed 명령어 사용법
sed [옵션] [세부옵션] [파일명] // 옵션에 따라 사용법이 달라짐
ex) sed -n '1p' sed_test.txt // sed_test.txt 파일의 첫 번째 행만 출력해서 보여준다
ex) sed -n '/samso/p' sed_test.txt // sed_test.txt 에서 samso가 포함된 행을 찾아 출력해서 보여준다
sed_test.txt
자주 사용하는 명령어와 옵션
명령어 | 의미 |
a\ (append) | 현재 행의 아래에 내용을 삽입합니다. |
c\ (change) | 현재 행의 내용을 새로운 내용으로 변경합니다. |
i\ (insert) | 현재 행의 위에 내용을 삽입합니다. |
d (delete) | 행을 삭제합니다. |
p (print) | 행을 출력합니다. |
r (read) | 파일로부터 행을 읽어와 추가합니다. |
s (substitue) | 문자열을 치환합니다. |
! | 선택된 행을 제외한 나머지 행에 명령어를 적용합니다. |
옵션 | 의미 |
-e | sed를 사용할 때 출력되는 값을 보여준다(기본값) / 다중 명령어 사용 시 반드시 사용해야함 |
-f | 스크립트 파일에서 명령어를 읽도록 지정해주는 옵션 |
-n | 패턴이 일치하는 라인만 출력해준다. |
-i | 변경되는 값을 실제 파일에 저장할 때 사용하는 옵션 |
1. 특정 행을 출력 - p (print)
1.1 전체 내용을 출력 : 전체를 출력하기 위해서는 /$/p 또는 1,$p 로 출력해 보면 됩니다. ($ 이 전체를 의미)
ex) sed -n -e '1,$p' sed_test.txt
1.2 첫 번째 줄 출력 : sed - n -e '1p' sed_test.txt // 첫 번째 줄만 출력해 준다.
1.3 원하는 줄까지 출력 : sed -n -e '1,6p' sed_test.txt // 1~6까지 출력해 준다. (시작줄, 마지막줄p 형태)
1.4 특정줄부터 마지막까지 출력 : sed -n -e '6,$p' sed_test.txt // 6~ 마지막까지 출력해 준다.
1.5 다중 조건에 맞게 출력 : sed -n -e '1p' -e '3,7p' sed_test.txt // -e 옵션을 이용해 첫 번째 / 3~7 출력
1.6 특정 문자열이 포함된 줄 출력 : sed -n -e '/samso/p' -e '/lee/p' sed_test.txt // /포함된 문자열/p
2. 특정 행을 삭제 - d (delete)
2.1 2~5번째 줄 삭제하고 나머지 모든 줄 출력 : sed -n -e '2,5d' -e '1,$p' sed_test.txt
3. 단어 치환 - s (substitute) (자주 사용)
s/[변경 전]/[변경 후]/g 또는 s/[변경 전]/[변경 후]/gi
※ g는 global의 약자로 전체에 적용 // i는 ignore case의 약자로 대소문자 구분 안 함
3.1 samso를 abcde으로 단어 치환 : sed -n -e 's/samso/abcde/g' -e '1,$p' sed_test.txt //
3.2 특정 단어로 시작 또는 끝나는 단어를 포함하는 라인의 문자열 치환
특정 단어로 시작하는 줄을 선택하려면 앞에 '^'문자를 사용하면 됩니다.
let_it_go.txt
let_it_go.txt 에서 Let으로 시작하는 줄의 첫 Let을 LET으로 바꿔봅니다.
# sed -n -e 's/^let/LET/gi' -e '1,$p' let_it_go.txt // ^ 문자를 이용하여 시작되는 단어 확인
특정 단어로 끝나는 줄을 선택하려면 문자열 끝에 '$'문자를 사용하면 됩니다.
let_it_go.txt 에서 제일 마지막 anyway. 를 ANYWAY로 바꿔봅니다.
# sed -n -e 's/anyway.$/ANYWAY/gi' -e '1,$p' let_it_go.txt
4. 문자열 추가 - a, i (append, insert)
/[검색할 문자열]/a\[추가할 문자열] --> 검색된 값 아랫줄에 추가
/[검색할 문자열]/i\[추가할 문자열] --> 검색된 값 윗줄에 추가
# sed -n -e 'lee/a\append' -e '1,$p' sed_test.txt // lee가 포함된 값 아랫줄에 추가
# sed -n -e 'lee/i\insert' -e '1,$p' sed_test.txt // lee가 포함된 값 윗줄에 추가
5. 특정 행의 내용을 전부 교체 - c (change)
/[바꿀 행이 포함된 문자열 ]/c\[바꿀 내용]
Let으로 시작하는 줄의 내용을 바꿔 봅니다.
# sed -n -e '/^Let/c\Let it go X2' -e '1,$p' let_it_go.txt
samso가 포함된 줄의 내용을 바꿔 봅니다.
# sed -n -e '/samso/c\sed 명령어' -e '1,$p' sed_test.txt
6. 특정 행에 파일 내용 추가 - r (read)
perfect.txt
100으로 끝나는 줄 다음에 텍스트 파일을 읽어서 추가한다.
# sed -n -e '/100$/r perfect.txt' -e '1,$p' sed_test.txt
7. 특정 문자를 포함하지 않은 내용 출력 - !
1234를 포함하지 않은 행들만 출력한다.
# sed -n '/1234/!p' sed_test.txt
8. 메타문자 : 패턴 검색을 위해 메타문자를 제공한다.
문자 | 기능 | 사용법 | 설명 |
^ | 행의 시작 지시자 | /^samso/ | samso로 시작하는 문자 검색 |
$ | 행의 끝 지시자 | /samso$/ | samso로 끝나는 문자 검색 |
. | 하나의 문자와 대응 | /sa..o/ | sa다음 두 문자 후 o로 끝나는 문자 검색 |
* | 선행 문자와 같은 문자의 0개 혹은 임의 개수와 대응 | /*samso/ | 0개 혹은 공백 후 samso로 끝나는 문자 검색 |
[] | [] 사이의 문자 집합 중 하나와 대응 | /[Ss]amso/ | Samso, samso를 포함하는 문자 검색 |
[^] | 문자 집합에 속하지 않는 한 문자와 대응 | /[^A-RT-Z]amso/ | A-R, T-Z범위에 포함되지 않는 문자 이후 amso로 끝나는 문자 검색 |
\(..\) | 문자열을 저장 | s/\(samso\)/\kiki/ | samso 검색 후 kiki로 저장 |
& | 검색열을 저장하여 치환할 때 사용 | s/samso/*&*/ | 문자열 samso가 &으로 치환됨 |
\< | 단어의 시작 지시자 | /\<s/ | s로 시작하는 단어를 포함한 문자 검색 |
\> | 단어의 끝 지시자 | /o\>/ | o로 끝나는 단어를 포함한 문자 검색 |
'OS > Linux' 카테고리의 다른 글
Linux - 서버 간 파일 복사 명령어(scp) / 원격 파일 복사 (0) | 2023.03.10 |
---|---|
Linux - 파일 출력 명령어 (cat) (0) | 2023.03.08 |
Linux - mount(마운트) (0) | 2023.02.14 |
Linux - kernel(커널) 이란 무엇일까? (0) | 2023.02.09 |
Linux - shell(쉘,셸) 이란 무엇일까? (0) | 2023.02.08 |