본문 바로가기

OS/Linux

Linux - 텍스트 편집 명령어(sed)

728x90

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로 끝나는 단어를 포함한 문자 검색

 

728x90
반응형