본문 바로가기
리눅스

SED

by ho-bolt 2021. 11. 3.

스크립트에 따라 표준 출력 결과를 편집하여 주는 명령어 

실제 파일도 편집해 주는 편집기 역할을 한다. 

SED [스크립트] [ 파일명] 형태로 사용한다. 

 

주요 옵션 

 

1. 옵션이 없을 경우 해당하는 행을 한 번더 출력한다. 

2. -n : 해당하는 행만 출력한다. 거의 필수!! 

3. -e : 스크립트를 여러개 사용할 수 있도록 한다. 4. -i : 파일을 실제로 수정하도록 한다. 정규식 : '/regex/p' : 정규식에 해당하는 행을 출력 '/n,/regex/p'  : n번째부터 정규식에 해당하는 행을 발견할때까지의 행을 출력 정규식은 '/regex/,/regex/p' 와 같이 여러 개를 지정 가능하다. (or 조건으로 동작한다)  

 

스크립트 명령어 p (print): 해당하는 행을 출력하여 주는 명령어 => 'm,np' :  m번째부터 n번째까지의 행을 출력해준다. 

 

-n을 써줘야하는 이유는 반복적으로 나오기 때문에 -n을 사용하여 내가 보고자 하는 행만 출력할 수 있게 해줘야 한다. 

 

정규식 : '/regex/p' : 정규식에 해당하는 행을 출력 

 

대문자 R이나 소문자r로 시작하는 것을 etc/passwd에서 출력해줘 라는 의미이다. 

이렇게 sed명령어로 정규식에 해당하는 애만 출력할 수 있다. 

 

'/n,/regex/p'  : n번째부터 정규식에 해당하는 행을 발견할때까지의 행을 출력 

 

 

== 5번째 행부터 root를 발견할 때까지 행을 출력해줘 ==root를 발견하면 거기서 출력멈춰! 

 

 

정규식은 '/regex/,/regex/p' 와 같이 여러 개를 지정 가능하다. (or 조건으로 동작한다) 

 

 

adm과 lp과 포함되어 있는 것을 호출해줘

 

----------------------------------------------------------------------------------------------------------------------

 

d(delete) 명령어 

해당하는 행을 삭제하는 명령어 

'nd' : n번째 행을 삭제하고 출력  => -n옵션 필요없다. 

 

[root@localhost tmp]# sed '1d' /etc/passwd ==1번째 행 삭제하고 출력해줘 

 

'm,nd' : m번째부터 n번째까지 삭제하고 출력 


[root@localhost tmp]# sed '5,45d' /etc/passwd ==
5번째부터 45번째까지 삭제한다  

 

'n,$d' : n번째 부터 마지막 라인까지 삭제하고 출력 

 

5번째부터 마지막라인까지 다 삭제 ==1번째부터 5번째만 남기고 다 삭제 

 

/regex/d : 정규식이 포함된 라인만 삭제하고 출력 

 

[root@localhost tmp]# sed '/[Rr]oot/d' /etc/passwd

 

=> Root, root를 포함한 것을 삭제한 후 출력 

 

---------------------------------------------------------------------------------------------------------------------------------

 

s (substitution) 명령어 ==치환 

: 해당하는 정규식을 치환하여 주는 명령어 

's/regex/string/' : 정규식에 대응하는 문자를 입력한 문자로 치환하여 출력한다. 

Root, root를 !!로 바꾼다! 

1번줄 을 보면 !!가 보이고 마지막 operator도 원래 root가 있었는데 !!로 바뀌었다. 

1번줄 초록색을 보면 뒤에 root는 바뀌지 않았는데 그 이유는 행마다 조회했을 때 

root를 만나면 치환해주고 그 이후의 것은 대응하지 않기 때문이다. 

만약 그 뒤의 문자도 대응하게 하려면 /g 옵션을 넣어야 한다. 

 

'/s/regex/string/g' : 정규식에 대응하는 문자가 여러개 있을 경우 모두 치환하여 출력

다 바뀌었다!!

 

'm,ns/regex/string/g : m번째에서 n번째 행의 정규식에 대응하는 문자를 입력한 문자로 치환하여 출력 

 

1,3행만 치환한다고 하여 operator의 root는 바뀌지 않은 것을 알 수 있다. 

 

 

-i 

file01.txt.에 This is File File is SED Test File이라고 편집한 후에 sed의 s명령어로 File을 !!로 바꾸는 명령어 이다. 

그러나 cat으로 file01.txt.를 읽어보면 바뀌지 않은 것을 알 수 있다.

이때 -i 옵션을 넣어서 명령어를 작성하면 vi도 편집하는 것을 알 수 있다. 

 

=====================================================================

 

 

728x90

'리눅스' 카테고리의 다른 글

for 문의 continue문 활용하기  (0) 2021.11.22
셸 스크립트 프로그래밍  (0) 2021.11.04
AWK  (0) 2021.10.27
명령어 , 파일디스크립터, GREP  (0) 2021.10.26
매개변수 확장  (0) 2021.10.26

댓글