미스터 역마살
[Linux] SED 본문
728x90
반응형
SED란?
정규식과 같은 패턴 식을 적용하여 파일을 원하는대로 편집할 수 있는 프로그램 이다. vi 편집기처럼 직접 파일을 열어 고치지 않고 커맨드 창 또는 스크립트에서 동작을 하여 원하는 부분만 변경해준다는 특징이 있다.
SED 특징
sed는 쉘 또는 스크립트에서 파이프(|)와 같이 사용될 수 있는 명령어이다.
그리고 기본적으로 정규표현식이 사용가능하기 때문에 정규표현식을 알면 더 고급지게 sed를 이용할 수 있다.
주의할 점은 정규표현식을 사용하기 때문에 특수문자 앞에 역 슬래시(\,\)를 붙여주어야 합니다. \를 쓰면 리눅스에서는 역슬래시로 받아들인다.
예) sed 's/\$man/man/g' test.txt
SED 옵션
- e : sed를 사용하였을 때 출력되는 값을 보여준다. 이 옵션은 기본값으로 굳이 안 써도 되지만 다중 명령어를 쓸 때는 반드시 써야 한다.
- n : 특정 값이 들어간 줄만 출력해주는 기능이다. 주로 p 명령어와 사용된다.
- f : 스크립트를 파일로부터 읽어들이며 명령어를 지정하는 명령어라고 하는데 저는 거의 사용하지 않는다.
- i : 변경되는 값을 실제로 파일에 저장하는 옵션이다. 출력되는 값이 없이 바로 실제 파일에 적용되는 것이 특징이다.
SED 자주 쓰는 명령어
특정 범위 만큼 파일 내용 출력
# employees파일에서 첫 번째 행만 출력해서 화면에 보여준다.
sed -n '1p' employees;
# employees파일에서 1~3라인 범위의 내용을 출력해서 보여준다.
sed -n '1,3p' employees;
# employees파일에서 8라인부터 파일끝까지 출력해서 보여준다. $는 '끝'을 의미합니다.
sed -n '8,$p' employees;
# employees파일의 1행 출력, 8번부터 마지막 행 까지 출력
sed -n -e '1p' -e '8,$p' employees
# file파일에서 love가 포함된 행들을 찾아 출력으로 보여줘 (-n 옵션이 있어야 love 패턴을 포함하는 줄들만 출력합니다)
sed -n '/love/p' file
# file파일에서 west가 나오는 행과 east가 나오는 행 사이의 모든 행들이 출력됩니다. west가 east 다음에 나오면 west가 나오는 행부터 파일의 마지막까지 출력됩니다.
sed -n '/west/,/east/p' file
# 3번째 행부터 employee로 시작되는 행까지 출력합니다.
sed -n '3,/^employee/p' file
특정 단어로 시작하는 행들만 추출
# 107로 시작하는 행 출력
sed -n '/^107/p' employees
# 103이 포함된 행 출력
sed -n '/103/p' employees
공백이나 빈줄 제거
# employees파일에서 빈 라인들을 지운 후 내용을 출력해준다.
sed '/^$/d' employees
# employees파일에서 빈 라인들을 삭제한 후 결과를 new_employees라는 파일명으로 저장한다.
sed '/^$/d' employees > new_employees
# employees파일에서 빈 라인들이나 공백으로 채워진 행들을 삭제한 후 new_employees라는 파일명으로 저장한다.
sed '/^ *$/d' employees > new_employees
# file파일에서 3번째 행을 삭제합니다. 나머지 행들이 출력.
sed '3d' file
# 5번째 행부터 마지막 행까지 삭제, 그리고 나머지 행들이 출력된다.
sed '5,$d' file
# 마지막 행을 삭제. d명령어로 삭제된 행 이외의 모든 행들이 출력됨
sed '$d' file
# 파일에서 apple 포함하는 모든 행을 삭제 나머지 행을 출력합니다.
sed '/apple/d' file
단어 치환
# IT_PROG라는 단어를 찾아 DEVELOPER라는 단어로 변경해줘!
sed 's/IT_PROG/DEVELOPER/g' employees
# IT_PROG라는 단어를 찾아 DEVELOPER라는 단어로 변경해줘! (대소문자 무시하고)
sed 's/it_prog/DEVELOPER/gi' employees > new_employees
# [0-9][0-9]는 두 자리 숫자를 의미하죠. 근데 그 다음에 끝을 의미하는'$'가 왔어요.
# 즉 '두 자리 숫자로 끝나는 행'이 바꿈의 대상이 됩니다. 여기서 '&'는 검색열에서 지정한 문자열을 대신합니다.
# 그 문자열 뒤에 '.5'가 붙었네요. 즉 두자리 숫자로 끝나는 행 (ex 94) 를 찾으면 뒤에 점오를 붙인 단어로 (ex 94.5) 치환해 보여달라는 명령어입니다.
sed 's/[0-9][0-9]$/&.5/' file
파일 읽기 및 쓰기
# file파일로부터 ref라는 단어를 찾으면 그 패턴찾은 행 뒤에 addfile의 내용을 붙여 출력합니다.
sed '/ref/r addfile' file
# file파일로부터 north라는 패턴이 포함된 행을 찾으면 그 선택한 행들을 outputfile에다가 저장합니다.
sed -n '/north/w outputfile' file
# file파일에서 END로 끝나는 행을 찾아, 그 다음에 'THANK YOU FOR READING'을 추가합니다.
sed '/END$/a\THANK YOU FOR READING' file
SED Subcommand 종류
SED의 메타문자
- ^ : 행의 시작 지시자
ex) /^test/ : test로 시작하는 행 - $ : 행의 끝 지시자
ex) /test$/ : test로 끝나는 행 - . : 하나의 문자
ex) /t..t/ : t로 시작하는 문자 다음에 두 글자가 오고 t로 끝나는 문자열을 포함하는 행 - *** : 0개 혹은 임의의 임의 갯수**
ex) /*test/ 0개 혹은 임의 갯수의 문자 후에 test로 끝나는 행 - [] : [] 사이의 문자 집합
ex) /[Tt]est/ : Test, test - [^] : 문자 집합에 속하지 않는 한 문자와 대응
ex) /[^A-K]est/ : A ~ K를 제외한 문자와 est가 붙어있는 문자열 - \(..\) : 태그로 문자열을 지정하는데 사용
ex) s/\(lov\)able/\1er/ : 지정한 lov를 tag 1로 저장한다. tag로 저장한 값은 \1을 사용한다 tag는 9개까지 가능하다. - & : 검색열을 저장하여 다음에 사용
ex) s/test/&/ : test를 test로 치환 - \< : 단어의 시작 지시자
ex) /\<test/ : test로 시작하는 단어를 포함하는 행 - \> : 단어의 끝 지시자
ex) /\>test/ : test로 끝나는 단어를 포함하는 행 - x\{m\}/ : 문자 x를 m번 반복한다.
ex) /a\{5\} : a가 5번 반복 - x\{m,\}/ : 문자 x를 최소 m번 반복한다.
ex) /a\{5,\}/ : a가 적어도 5번 반복 - x\{m,n\} : 문자 x를 m회 이상 n회 이하 반복한다.
ex) /a\{5,10\}/ : a가 5회에서 10회 사이로 반복
참고자료
https://jhnyang.tistory.com/287
728x90
'IT > 기타' 카테고리의 다른 글
[Linux] Shell Script 작성법 (0) | 2022.07.27 |
---|---|
[Linux] Crontab 설정 (0) | 2022.07.27 |
이 하드 디스크 공간에 Windows를 설치할 수 없습니다. 에러시 해결방법 (0) | 2020.12.03 |
VMSTAT 로 메모리 사용률 확인 (0) | 2020.01.12 |
SAR 를 활용한 성능 모니터링 (0) | 2020.01.12 |
Comments