You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 리눅스 sed on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://toplist.maxfit.vn team, along with other related topics such as: 리눅스 sed 리눅스 sed 옵션, 리눅스 sed 정규표현식, 리눅스 sed 치환, 리눅스 sed 파일 수정, 리눅스 sed 삭제, Sed ‘s, 리눅스 sed 추가, 리눅스 sed awk
[리눅스/유닉스] 유용 명령어 sed를 살펴보자! sed 명령어 사용법과 예시, 패턴 스페이스와 홀드 스페이스, 유용 표현
- Article author: jhnyang.tistory.com
- Reviews from users: 25024 Ratings
- Top rated: 3.9
- Lowest rated: 1
- Summary of article content: Articles about [리눅스/유닉스] 유용 명령어 sed를 살펴보자! sed 명령어 사용법과 예시, 패턴 스페이스와 홀드 스페이스, 유용 표현 [리눅스/유닉스] 유용 명령어 sed를 살펴보자! sed 명령어 사용법과 예시, 패턴 스페이스와 홀드 스페이스, 유용 표현. 양햄찌(jhnyang) 2020. 5. 25. …
- Most searched keywords: Whether you are looking for [리눅스/유닉스] 유용 명령어 sed를 살펴보자! sed 명령어 사용법과 예시, 패턴 스페이스와 홀드 스페이스, 유용 표현 [리눅스/유닉스] 유용 명령어 sed를 살펴보자! sed 명령어 사용법과 예시, 패턴 스페이스와 홀드 스페이스, 유용 표현. 양햄찌(jhnyang) 2020. 5. 25. [리눅스 유닉스 완전정복 목차] 안녕하세요. 주인장 양햄찌입니다. 오늘은 sed 명령어에 대해 살펴보려고 해요. SED 명령어 알기, SED는 무슨 명령어야? vi편집기 아시죵~ sed 명령어도 vi편집기처럼 편집에 특화..
- Table of Contents:
SED 명령어 알기 SED는 무슨 명령어야
패턴 스페이스(Pattern space)와 홀드 스페이스(hold space)
sed 명령어 자주쓰는 대표적 사용법
SED subcommand 명령어 종류와 의미
태그
‘별걸다하는 IT리눅스 유닉스’ Related Articles
티스토리툴바
REAKWON :: [리눅스] sed 명령어를 이용해 원하는 정보를 추출 – 개념과 예제 모음
- Article author: reakwon.tistory.com
- Reviews from users: 6320 Ratings
- Top rated: 3.1
- Lowest rated: 1
- Summary of article content: Articles about REAKWON :: [리눅스] sed 명령어를 이용해 원하는 정보를 추출 – 개념과 예제 모음 SED는 Stream Editor의 약자로 sed라는 명령어로 원본 텍스트 파일을 편집하는 유용한 명령어입니다. 리눅스의 editor라하면 생각나는 에디터가 있지 … …
- Most searched keywords: Whether you are looking for REAKWON :: [리눅스] sed 명령어를 이용해 원하는 정보를 추출 – 개념과 예제 모음 SED는 Stream Editor의 약자로 sed라는 명령어로 원본 텍스트 파일을 편집하는 유용한 명령어입니다. 리눅스의 editor라하면 생각나는 에디터가 있지 … SED(Stream Editor) SED는 Stream Editor의 약자로 sed라는 명령어로 원본 텍스트 파일을 편집하는 유용한 명령어입니다. 리눅스의 editor라하면 생각나는 에디터가 있지 않나요? vi 편집기가 대표적인데, 여러분..
- Table of Contents:
SED(Stream Editor)
티스토리툴바
[Linux] sed – 리눅스 명령어 sed에 대해서
- Article author: etloveguitar.tistory.com
- Reviews from users: 34396 Ratings
- Top rated: 4.6
- Lowest rated: 1
- Summary of article content: Articles about [Linux] sed – 리눅스 명령어 sed에 대해서 [Linux] sed – 리눅스 명령어 sed에 대해서 … vi, vim은 편집기를 열어서 수정하는 방식이라면, sed는 명령행에서 파일을 인자로 받고, sed 명령어 … …
- Most searched keywords: Whether you are looking for [Linux] sed – 리눅스 명령어 sed에 대해서 [Linux] sed – 리눅스 명령어 sed에 대해서 … vi, vim은 편집기를 열어서 수정하는 방식이라면, sed는 명령행에서 파일을 인자로 받고, sed 명령어 … sed 명령어는 편집에 특화된 명령어다. sed = streamlined editor의 약자 (능률적인) 수정 치환 삭제 글 추가 등 편집기 기능을 수행할 수 있다. vi, vim은 편집기를 열어서 수정하는 방식이라면, sed는 명령행에..
- Table of Contents:
Richet의 Tech Blog
[Linux] sed – 리눅스 명령어 sed에 대해서 본문티스토리툴바
[Linux] sed 커맨드 상황별 사용법
- Article author: engineer-mole.tistory.com
- Reviews from users: 2794 Ratings
- Top rated: 4.6
- Lowest rated: 1
- Summary of article content: Articles about [Linux] sed 커맨드 상황별 사용법 SED조건식 · # 처리할 행 번호를 지정한다. 행번호,행번호 · # 지정한 문자열이 발견된 행을 처리한다. · #코멘트 # 코멘트 · # 현재의 행 번호를 표시한다. …
- Most searched keywords: Whether you are looking for [Linux] sed 커맨드 상황별 사용법 SED조건식 · # 처리할 행 번호를 지정한다. 행번호,행번호 · # 지정한 문자열이 발견된 행을 처리한다. · #코멘트 # 코멘트 · # 현재의 행 번호를 표시한다. 쉘에서 데이터를 가공할 때 sed를 자주 사용하게 되는데, 상황에 따른 사용예를 정리한 포스팅이다. sed 커맨드는 Linux/Unix/BSD/OSX의 경우 기본적으로 설치되어 있으므로, sed 커맨드를 사용하기 위해 따로 설..
- Table of Contents:
티스토리툴바
Linux sed 사용법
- Article author: www.lesstif.com
- Reviews from users: 8598 Ratings
- Top rated: 4.8
- Lowest rated: 1
- Summary of article content: Articles about Linux sed 사용법 sed 는 GNU 의 getopt 를 사용하므로 short, long option 방식 지원함(GNU getopt 참고) … sed ‘s/unix/linux/’ sed-example.txt linux is great os. unix is … …
- Most searched keywords: Whether you are looking for Linux sed 사용법 sed 는 GNU 의 getopt 를 사용하므로 short, long option 방식 지원함(GNU getopt 참고) … sed ‘s/unix/linux/’ sed-example.txt linux is great os. unix is …
- Table of Contents:
주요 옵션
실제 사용 예제
같이 보기
Ref
리눅스 sed 명령어 : 네이버 블로그
- Article author: m.blog.naver.com
- Reviews from users: 3242 Ratings
- Top rated: 3.5
- Lowest rated: 1
- Summary of article content: Articles about 리눅스 sed 명령어 : 네이버 블로그 리눅스 sed 명령어 … sed 명령어는 스트림 에디터 입니다. … 원본 파일에 변형을 주지 않고 단지 출력되는 결과를 변화시켜 보여주는 역할을 합니다. sed … …
- Most searched keywords: Whether you are looking for 리눅스 sed 명령어 : 네이버 블로그 리눅스 sed 명령어 … sed 명령어는 스트림 에디터 입니다. … 원본 파일에 변형을 주지 않고 단지 출력되는 결과를 변화시켜 보여주는 역할을 합니다. sed …
- Table of Contents:
카테고리 이동
SUPER USER
이 블로그
명령어
카테고리 글
카테고리
이 블로그
명령어
카테고리 글
sed 사용법 및 예시
- Article author: seul96.tistory.com
- Reviews from users: 23199 Ratings
- Top rated: 3.4
- Lowest rated: 1
- Summary of article content: Articles about sed 사용법 및 예시 … sed 명령어를 사용하다가 아예 쉘 스크립트로 만들기 위하여 이론 공부를 시작했다. ※ 김태용의 리눅스 쉘 스크립트 프로그래밍 입문책 참고 … …
- Most searched keywords: Whether you are looking for sed 사용법 및 예시 … sed 명령어를 사용하다가 아예 쉘 스크립트로 만들기 위하여 이론 공부를 시작했다. ※ 김태용의 리눅스 쉘 스크립트 프로그래밍 입문책 참고 … 최근에 고객사마다 환경이 다르기 때문에 ip주소와 경로를 매번 수정해줘야했는데, window 환경에 notepad++과 같은 tool이 설치 되어있으면 ctrl+f를 이용하여 전체적인 수정이 가능하지만, command line만 사용..IT 및 Money 관련
- Table of Contents:
sed 사용법 및 예시
11 sed란
12 sed 도움말 보는 방법
13 sed 동작 원리
14 sed 정규표현식 사용
15 sed 테스트
16 sed 예제
티스토리툴바
Linux/기본명령어/sed – 인코덤, 생물정보 전문위키
- Article author: www.incodom.kr
- Reviews from users: 12505 Ratings
- Top rated: 3.6
- Lowest rated: 1
- Summary of article content: Articles about Linux/기본명령어/sed – 인코덤, 생물정보 전문위키 sed #. NAME #. sed – 필터링과 텍스트를 변환하는 스트림 편집기. 원본 변화없이, 출력 결과를 변화. Syntex #. sed ‘s/찾을텍스트/바꿀텍스트/’ … …
- Most searched keywords: Whether you are looking for Linux/기본명령어/sed – 인코덤, 생물정보 전문위키 sed #. NAME #. sed – 필터링과 텍스트를 변환하는 스트림 편집기. 원본 변화없이, 출력 결과를 변화. Syntex #. sed ‘s/찾을텍스트/바꿀텍스트/’ … #sed
- Table of Contents:
NAME #
Syntex #
Option #
정규식 #
연산자 #
예제 #
참조 #
[리눅스 명령어] sed : sed 명령어 사용하여 파일 내용 일괄 변경하기
- Article author: kggo.tistory.com
- Reviews from users: 33550 Ratings
- Top rated: 4.4
- Lowest rated: 1
- Summary of article content: Articles about [리눅스 명령어] sed : sed 명령어 사용하여 파일 내용 일괄 변경하기 IT/Linux-Vim. [리눅스 명령어] sed : sed 명령어 사용하여 파일 내용 일괄 변경하기. 체계성 2021. 12. 1. 22:03. 출처 : https://honeyteacs.tistory.com/41 … …
- Most searched keywords: Whether you are looking for [리눅스 명령어] sed : sed 명령어 사용하여 파일 내용 일괄 변경하기 IT/Linux-Vim. [리눅스 명령어] sed : sed 명령어 사용하여 파일 내용 일괄 변경하기. 체계성 2021. 12. 1. 22:03. 출처 : https://honeyteacs.tistory.com/41 … 출처 : https://honeyteacs.tistory.com/41
- Table of Contents:
Atomic Habits
[리눅스 명령어] sed sed 명령어 사용하여 파일 내용 일괄 변경하기 본문Linux에서 SED 명령의 50가지 실제 예
- Article author: ciksiti.com
- Reviews from users: 9235 Ratings
- Top rated: 4.8
- Lowest rated: 1
- Summary of article content: Articles about Linux에서 SED 명령의 50가지 실제 예 Sed는 Unix에서 사용 가능한 세 가지 널리 사용되는 필터링 유틸리티 중 하나이며 나머지는 “grep 및 awk”입니다. 우리는 이미 Linux grep 명령을 다루었 … …
- Most searched keywords: Whether you are looking for Linux에서 SED 명령의 50가지 실제 예 Sed는 Unix에서 사용 가능한 세 가지 널리 사용되는 필터링 유틸리티 중 하나이며 나머지는 “grep 및 awk”입니다. 우리는 이미 Linux grep 명령을 다루었 …
- Table of Contents:
Best Tech Tips
초보자를 위한 유용한 SED 명령
SED 작동 방식 기본 이해
마무리 생각
See more articles in the same category here: 180+ tips for you.
[리눅스/유닉스] 유용 명령어 sed를 살펴보자! sed 명령어 사용법과 예시, 패턴 스페이스와 홀드 스페이스, 유용 표현
반응형
안녕하세요.
주인장 양햄찌입니다.
오늘은 sed 명령어에 대해 살펴보려고 해요.
SED 명령어 알기, SED는 무슨 명령어야?
vi편집기 아시죵~ sed 명령어도 vi편집기처럼 편집에 특화된 명령어라고 생각하면 됩니다. 수정 치환 삭제 글추가 등 편집기 기능은 왠만한거 다 가능~!
근데 vi편집기는 편집기를 열어서 서로 소통하듯 수정/변경을 해나가는 대화형 방식이죠. 내가 커서로 라인도 옮겨다니면서.. 지우고 글쓰고 등등 마치 워드파일 수정하듯!
근데 sed는 명령행에서 파일을 인자로 받아 명령어를 통해 작업한 후 결과를 화면으로 확인하는 방식입니다.
마치 편집기를 명령어 쓰듯 사용하는 것과 같아요.
sed 명령어를 이용해 파일을 변경했을 경우의 특징은, sed 편집기는 원본을 손상하지 않는다는 것입니다.
쉘 리다이렉션을 이용해 편집 결과를 저장하기 전까지는 파일에 아무런 변경도 가하지 않아요. 모든 결과는 내가 명령을 수행후 화면으로 출력되는데 출력된 결과가 원본과 다르더라도 원본에 손해가 없다는게 sed 명령어의 특징입니다.
sed 명령어는 streamlined editor를 의미합니다. streamlined는 ‘능률적인’을 의미하죠 ㅎㅎ
패턴 스페이스(Pattern space)와 홀드 스페이스(hold space)
sed 명령어는 동작시 내부적으로 두개의 워크스페이스를 사용하는데, (마치 우리 복붙할 때 임시 저장소 클립보드처럼~!) 이 두 버퍼를 패턴 스페이스(=패턴 버퍼)와 홀드 스페이스(=홀드 버퍼)라고 합니다.
이미지출처: https://code.snipcademy.com/tutorials/shell-scripting/sed/hold-buffer
패턴 버퍼는 sed가 파일을 라인단위로 읽을 때 그 읽힌 라인이 저장되는 임시 공간이예요.
우리가 sed명령어로 출력하라 하면 여기 있는 버퍼 내용을 출력하는거고, 뭔가 조작을 하면 여기 저장되어 있는 내용을 조작하는 겁니다. 원본을 건드는게 아니야~~ 즉 이 버퍼는 현재 내가 담고 있는 정보를 갖고 있겠죠. 텍스트 1라인에서 2라인으로 넘어가 글을 읽게 되면 여기 패턴 버퍼에는 2라인 현재 내용이 저장되겠죠.
그럼 홀드 스페이스는, 홀드 버퍼는 뭐에 쓰일까요??
홀드 스페이스는 패턴 버퍼처럼 짧은 순간 임시 버퍼가 아니라 좀 더 길게 가지고 있는 저장소입니다. 2라인 작업중이더라도 1라인을 기억하고 있을 수 있는 거예요.
즉 어떤 내용을 홀드 스페이스에 저장하면, sed가 다음 행을 읽더라도 나중에 내가 원할 때 불러와서 재사용할 수 있는 버퍼가 홀드 버퍼가 됩니다.
준비사항: 테스트 파일
명령어를 테스트 하기 위한 파일은 아래 포스팅에서 만들었던 employees 텍스트 파일을 사용했어요.
https://jhnyang.tistory.com/288
텍스트 파일:
employees 0.00MB
vi편집기로 열어보면 안의 내용은 아래와 같음
employees파일
sed 명령어 자주쓰는 대표적 사용법
아무래도 편집기 기능을 다 해주다보니 sed의 subcommand 즉, sed와 같이 쓰이는 명령어 조합이 굉장히 많은데요.
자세한 사용 예시들은 하단에 쭉 다루도록하고 대표적으로 자주 쓰이는 명령어 조합부터 일단 살펴보고 갑시다~!
■ 특정 범위만큼 파일내용 출력하기
1. sed -n ‘1p’ employees; 2. sed -n ‘1,3p’ employees; 3. sed -n ‘8,$p’ employees;
여기서 p는 print의 약자로 출력을 의미합니다. 컴마는 주소 범위를 지정해요.
sed는 원본을 건드리지 않는다고 했죠! sed로 작업한 부분만 억제해서 출력시키고 싶다면 -n옵션을 써줘야해요.
그래서 -n옵션은 p와 항상 짝짝꿍으로 사용됩니다.
결과창
1. employees파일에서 첫 번째 행만 출력해서 화면에 보여준다.
2. employees파일에서 1~3라인 범위의 내용을 출력해서 보여준다.
3. employees파일에서 8라인부터 파일끝까지 출력해서 보여준다. $는 ‘끝’을 의미합니다.
근데 3번과 같은 경우 앞에 헤더(EMPLOYEE_ID 이런 컬럼명) 가 없이 데이터값만 보이잖아요
1행이 헤더 데이터인데 8행부터 끝까지 출력했으니까~ 1행을 출력하고, 8행부터 끝까지 출력할 수 없을까?
sed -n -e ‘1p’ -e ‘8,$p’ employees
여러개의 편집 명령을 실행할 때 -e 옵션을 씁니다. 다음에 오는 것도 편집 명령어라는걸 알려줘요.
첫 번째 행과 8~끝 행 두 부분을 출력해줍니다.
결과챵
■ 특정 단어로 시작하는 행들만 추출하기
보통 로그파일의 경우 데이터들의 구별하기 위해 unique한 값이 맨앞에 붙는 경우가 많죠
한 예로, log20200527이라는 파일이 있는데 이 날짜에 처리된 거래들이 기록된다고 합시다.
그럼 그 거래를 구분하는 유니크값이 붙겠죠~? 상품코드라던가, 거래코드라던가 등등.. 도서관이면 대출기록에 도서거래일련번호가 로그에 찍히겠죠~~
1. sed -n ‘/^107/p’ employees — 107로 시작 2. sed -n ‘/103/p’ employees
107로 시작하는 행들을 뽑아줘~ 여기서 ‘^’는 메타문자로 ‘시작’을의미해요.
그냥 특정 단어를 포함하고 있는 행들을 뽑을 때에는 ^메타 문자 없이 검색하면 됩니다.
107로 시작
이 외에도 여러 정규식을 포함하여 원하는 것들만 쏙쏙 골라서 추출하시면 돼용~
1. employees파일에서 107로 시작하는 행만 출력해서 화면에 보여준다.
2. employees파일에서 103을 포함하고 있는 행들을 출력해서 보여준다.
■ 파일에서 공백으로 이루어지거나 빈줄 제거하기
1. sed ‘/^$/d’ employees 2. sed ‘/^$/d’ employees > new_employees 3. sed ‘/^ *$/d’ employees > new_employees
1. employees파일에서 빈 라인들을 지운 후 내용을 출력해준다.
2. employees파일에서 빈 라인들을 삭제한 후 결과를 new_employees라는 파일명으로 저장한다.
3. employees파일에서 빈 라인들이나 공백으로 채워진 행들을 삭제한 후 new_employees라는 파일명으로 저장한다.
여기서 보이는 ‘d’ 서브명령어는 delete의 약자로 삭제를 의미합니다.
‘/’사이에 들어있는 단어르 포함하고 있는 모든 줄을 삭제시키겠다! 를 의미하죠
그런데 ^는 행의 처음을 의미하고 $는 행의 끝을 의미하니까 행의 처음과 끝이 같이 만나있는 것 즉 빈 줄을 의미합니다~
employees 파일에서 빈 줄을 모드 제거하라 라는 뜻의 명령어가 되는거죠.
근데 1번처럼 하면 실제 원본 파일은 손상이 없기 때문에 제거 되지 않습니다. 2번처럼 redirection으로 new_employees파일을 따로 저장시켜주거나 ‘> employees’로 덮어쓰기해서 저장해줘야 완벽한 수정이 된다는거~
3번에 보이는 *는 메타문자로 앞의 문자를 0개 이상 찾습니다.
행의 시작이 0개 이상의 공백으로 이뤄지다 끝을 맺는거니까 공백이거나 빈 줄을 찾아낸다는 의미가 되는것~
https://jhnyang.tistory.com/127
■ 단어 치환
IT_PROG라고 되어있는 부분을 DEVELOPER로 변경해봅시다.
1. sed ‘s/IT_PROG/DEVELOPER/g’ employees 2. sed ‘s/IT_PROG/DEVELOPER/g’ employees > new_employees 3. sed ‘s/it_prog/DEVELOPER/gi’ employees > new_employees
s는 switch의 약자인가?? 치환할 떄 사용하는 subcommand예요.
여기서 s와 같이 쓰이는 g 플래그는 치환이 행에서 전체를 대상으로 이루어짐을 의미합니다. (걍 한 행에 바꿀게 여러개 있어도 다바꾼다는거, sed는 행by행이니까 g플래그를 쓰면 전체에서 뽑히는거 다 바꾼다는 뜻)
즉 1번은 파일 전체에서 IT_PROG라는 단어를 찾아 DEVELOPER라는 단어로 변경해줘!
근데 이렇게 하면 실제 원본 파일이 변경된건 아니고 출력만 이렇게 보이는거예요.
vi employees해서 파일을 열어보면 DEVELOPER가 없음을 알 수 있습니다. 파일을 저장하기 위해 2번처럼 리다이렉션해주기!
3번에 보이는 i플래그는 변경 대상 단어를 찾을 때 대소문자를 무시한다는 플래그입니다.
SED subcommand 명령어 종류와 의미
예시를 하나하나씩 살펴보면서 대표적인 subcommand들은 알아봤지만, 더 많은 subcommand들을 정리해보아요.
subcommand 의미 a\ 현재 행에 하나 이상의 새로운 행을 추가한다. c\ 현재 행의 내용을 새로운 내용으로 교체한다. d 행을 삭제한다. i\ 현재 행의 위에 텍스트를 삽입한다. h 패턴 스페이스의 내용을 홀드 스페이스에 복사한다. H 패턴 스페이스의 내용을 홀드 스페이스에 추가한다. g 홀드 스페이스의 내용을 패턴 스페이스에 복사한다. (패턴 스페이스가 비어있지 않은 경우에는 덮어쓰기~) G 홀드 스페이스의 내용을 패턴 스페이스에 복사한다. (패턴 스페이스가 비어있지 않은 경우에는 그 뒤에 추가) l 출력되지 않는 특수문자를 명확하게 출력한다. p 행을 출력한다. n 다음 입력 행을 첫 번째 명령어가 아닌 다음 명령어에서 처리하게 한다. q sed를 종료한다. r 파일로부터 행을 읽어온다. ! 선택된 행을 제외한 나머지 전체 행에 명령어를 적용한다. s 문자열을 치환한다.
sed s와 같이 쓰는 치환플래그
s와 쓰이는 플래그 의미 g 치환이 행 전체에 대해 이뤄진다. p 행을 출력한다. w 파일에 쓴다. x 홀드 버퍼와 패턴 스페이스의 내용을 서로 맞바꾼다. y 한 문자를 다른 문자로 변환한다. (y에 정규표현식 메타문자를 사용할 수 없다)
여기서 몇 개는 앞에서 살펴본 명령어들이죠?ㅎㅎ
다양한 사용 사용 예시들 examples
1. 출력 p 명령어 예시
sed -n ‘/love/p’ file
→ file파일에서 love가 포함된 행들을 찾아 출력으로 보여줘! (-n 옵션이 있어야 love 패턴을 포함하는 줄들만 출력합니다)
sed -n ‘/west/,/east/p’ file
→ file파일에서 west가 나오는 행과 east가 나오는 행 사이의 모든 행들이 출력됩니다. west가 east 다음에 나오면 west가 나오는 행부터 파일의 마지막까지 출력됩니다.
sed -n ‘3,/^employee/p’ file
→ 3번째 행부터 employee로 시작되는 행까지 출력합니다.
2. 삭제 d 명령어 예시
sed ‘3d’ file
→ file파일에서 3번째 행을 삭제합니다. 나머지 행들이 출력.
sed ‘5,$d’ file
→ 5번째 행부터 마지막 행까지 삭제, 그리고 나머지 행들이 출력된다.
sed ‘$d’ file
→ 마지막 행을 삭제. d명령어로 삭제된 행 이외의 모든 행들이 출력됨
sed ‘/apple/d’ file
→ 파일에서 apple 포함하는 모든 행을 삭제 나머지 행을 출력합니다.
3. 치환 s 명령어 예시
sed ‘s/clere/clear/g’ file sed -n ‘s/clere/clear/gp’ file
→ g플래그는 치환이 행 전체를 대상으로 이뤄짐을 의미하죠. clere라는 단어가 보이면 clear로 치환해 보여달라는거
→ 이렇게 치환 s랑 -n,p조합이랑 같이 쓰면 변경이 일어난 행들만 출력해줍니다.
cat file | sed ‘s/ */ /g’ sed -i ‘s/ */ /g’ file
→ 뒤에 파일명 안붙이고 이렇게 어떤 명령의 결과를 input으로 쓰는 파이프라인과 함께 써도 좋습니다.
공백이 여러개가 왔을 때 하나의 공백으로 깔끔하게 치환해 출력해달라는 명령어! (원본 영향 없음)
→ (GNU 리눅스) 이렇게 -i옵션을 사용하면 파일에 직접 수정을 가능케 합니다. (원본 영향 있음)
sed ‘s/[0-9][0-9]$/&.5/’ file
→ [0-9][0-9]는 두 자리 숫자를 의미하죠. 근데 그 다음에 끝을 의미하는’$’가 왔어요. 즉 ‘두 자리 숫자로 끝나는 행’이 바꿈의 대상이 됩니다. 여기서 ‘&’는 검색열에서 지정한 문자열을 대신합니다. 그 문자열 뒤에 ‘.5’가 붙었네요. 즉 두자리 숫자로 끝나는 행 (ex 94) 를 찾으면 뒤에 점오를 붙인 단어로 (ex 94.5) 치환해 보여달라는 명령어입니다.
4. 파일로부터 읽는(read) 명령어 r 예시
sed ‘/ref/r addfile’ file
→ file파일로부터 ref라는 단어를 찾으면 그 패턴찾은 행 뒤에 addfile의 내용을 붙여 출력합니다.
Austin이라는 단어를 찾으면 addfile파일 내용을 읽어 그 패턴행 뒤에 더해 출력해줬어요.
5. 파일에다가 쓰는(write) w명령어 예시
sed -n ‘/north/w outputfile’ file
→ file파일로부터 north라는 패턴이 포함된 행을 찾으면 그 선택한 행들을 outputfile에다가 저장합니다.
6. 문자열 추가(append)하기 a\ 명령어 예시
sed ‘/END$/a\THANK YOU FOR READING’ file
→ file파일에서 END로 끝나는 행을 찾아, 그 다음에 ‘THANK YOU FOR READING’을 추가합니다.
7. 패턴스페이스와 홀드스페이스 예시
sed -e ‘/northeast/h’ -e ‘$G’ file
→ file파일에서 northeast라는 단어를 찾은 후 그 행들을 홀드스페이스에 저장해놓습니다. (h명령어)
그리고 $는 마지막 행을 의미하니까 마지막 행에 홀드스페이스 내용을 패턴스페이스에 복사합니다. 대문자G의 경우 패턴스페이스에 내용이 있을 경우 뒤에 추가하는 명령어로, 텍스트 맨 뒤에 복사됩니다.
즉, 패턴 northeast를 포함하는 행들은 모두 홀드 스페이스로 복사되었다가 파일의 마지막에 추가됩니다.
오늘은 여기까지입니다. sed명령어가 워낙 사용방법이 다양하다보니 포스팅이 너무 길어졌네요.ㅎㅎㅎ 더 자세한 사용법은 man 명령어를 참고해주세요
공감/댓글/광고보답은 정보공유에 큰 동기가 됩니다 🙂
다음 포스팅에서 또 봐요 !
반응형
REAKWON :: [리눅스] sed 명령어를 이용해 원하는 정보를 추출
SED(Stream Editor)
SED는 Stream Editor의 약자로 sed라는 명령어로 원본 텍스트 파일을 편집하는 유용한 명령어 입니다. 리눅스의 editor라하면 생각나는 에디터가 있지 않나요? vi 편집기가 대표적인데, 여러분들이 vi편집기로 편집할때는 vi filename의 명령을 이용해서 파일을 열고 난 이후에 각종 vi 명령어를 통해서 이리 저리 움직여 추가, 삭제, 변경 등의 편집을 하게 되죠. 그리고 작업이 다 끝나게 되면 저장 후 나가게 됩니다. 이때 여러분은 원래의 파일을 변경하여 저장하기 때문에 원본은 변경됩니다. 그리고 vi는 실시간 저장할 수가 있습니다. 여기서 sed는 vi 편집기와는 다르게 이런 차이점이 있습니다.
1. sed와 vi가 다른 점은 sed는 명령어 형태로 편집이 되며 vi처럼 실시간 편집이 아닙니다.
2. 원본을 건드리지 않고 편집하기 때문에 작업이 완료되었어도 기본적으로 원본에는 전혀 영향이 없다는 점입니다.(단, 여러분이 sed옵션에서 -i 옵션을 지정한다면 원본을 바꾸게 됩니다.) 그래서 내부적으로 특수한 저장 공간인 버퍼를 사용합니다. 두 가지 버퍼는 패턴 버퍼(패턴 스페이스라고도 합니다)와 홀드 버퍼(홀드 스페이스라고도 합니다)입니다.
아래의 그림을 보면 sed는 InputStream으로 파일의 내용을 가져옵니다. 그리고 난 후에 패턴 버퍼에 그 내용을 담고 있으며 데이터의 변형과 추가를 위해 다시 임시 버퍼를 사용하게 되는데, 그게 홀드 버퍼입니다. 그리고 작업이 전부 완료되었다면 패턴 버퍼에 그 내용이 담기는데, 그 내용을 OutputStream으로 보내주게 되면 비로소 우리가 원하는 결과가 출력되는겁니다. 기본적으로 OutputStream은 콜솔화면인 stdout입니다. 우리는 그냥 sed가 내부적으로 2개의 버퍼를 가지고 있다고 보시면 됩니다.
pattern space and hold space
이제 sed의 기본적인 개념을 알아보았으니 사용법에 대해서 알아보아야겠죠? 그 전에 sed에 대한 input 파일은 아래의 내용처럼 간단한 텍스트 파일로 하도록 하겠습니다. 필요에 따라 다른 text파일도 사용하도록 하겠습니다.
sed_test_file.txt
name phone birth sex score reakwon 010-1234-1234 1981-01-01 M 100 sim 010-4321-4321 1999-09-09 F 88 nara 010-1010-2020 1993-12-12 M 20 yut 010-2323-2323 1988-10-10 F 59 kim 010-1234-4321 1977-07-17 M 69 nam 010-4321-7890 1996-06-20 M 75 sol 010-5911-1111 1976-10-12 F 60 lee 010-4949-4949 1988-09-30 F 80 feng 010-1111-9999 1979-03-20 M 90
기본적으로 sed는 아래와 같은 형태로 사용합니다.
sed -n -e ‘command’ [input file]
-n : sed는 pattern buffer의 내용을 자동적으로 출력해주는데, 이 옵션을 사용하게 되면 자동 출력을 하지 않습니다. -n옵션을 하지 않고 sed명령을 해보시면 눈에 띄게 많은 데이터가 출력되는것을 확인할 수 있습니다. 매우 지저분하지요. 그래서 -n옵션을 붙여 패턴 버퍼의 자동출력을 하지 않습니다. 여러분은 그래서 sed 명령의 기본 형태는 sed -n으로 생각하시면 됩니다.
-e : 이 옵션 다음으로는 우리가 사용할 command를 가지고 텍스트 파일을 가공해줍니다. -e의 command에는 어떤 종류가 있는지 확인해보도록 합시다.
그리고 맨 마지막에는 우리가 가공할 원본 파일을 지정해주면 됩니다.
1. 특정 행을 출력 – p (print)
1-1. 천재 내용을 출력 : 기본적으로 전체의 줄을 출력하려면 command에 /$/p 또는 1,$p로 출력해볼 수 있습니다.
sed -n -e ‘1,$p’ sed_test_file.txt sed -n -e ‘/$/p’ sed_test_file.txt
1-2. 첫번째 줄 출력 : 여러분이 첫번째 줄만 출력해주기를 아래의 command를 사용할 수 있습니다.
sed -n -e ‘1p’ ./sed_test_file.txt
name phone birth sex score
끝 p는 print의 p를 의미합니다.
1-3. start ~ end 줄까지 출력 : 그렇다면 첫째줄부터 4번째줄을 출력하기를 원한다면 쉼표로 구분된 출력하길 원하는 줄, 마지막 줄 p 의 형태를 사용하면 됩니다.
sed -n -e ‘1,4p’ sed_test_file.txt
name phone birth sex score reakwon 010-1234-1234 1981-01-01 M 100 sim 010-4321-4321 1999-09-09 F 88 nara 010-1010-2020 1993-12-12 M 20
1-4. 특정줄에서 마지막 줄까지 출력 : 어떤 줄에서 마지막 줄까지 출력하려면 $문자를 사용하면 됩니다. $는 마지막줄을 의미합니다. 그래서 5번째 줄에서 마지막줄까지 출력하려면 아래와 같은 command를 사용할 수 있습니다.
sed -n -e ‘7,$p’ sed_test_file.txt
nam 010-4321-7890 1996-06-20 M 75 sol 010-5911-1111 1976-10-12 F 60 lee 010-4949-4949 1988-09-30 F 80 feng 010-1111-9999 1979-03-20 M 90
1-5. 다중 command 사용 : 만약 command를 여러개 사용하고 싶다면 -e 옵션을 이용해서 여러개 사용하여 command를 줄 수 있습니다. 만약 1번째 줄을 출력해주고, 8번째 줄부터 끝까지 출력하기를 원한다면 아래의 명령을 사용하면 됩니다.
sed -n -e ‘1p’ -e ‘8,$p’ sed_test_file.txt
name phone birth sex score sol 010-5911-1111 1976-10-12 F 60 lee 010-4949-4949 1988-09-30 F 80 feng 010-1111-9999 1979-03-20 M 90
1-6. 특정 문자열이 있는 줄 출력
만약 위의 파일에서 여자(F, Female)만 출력한다고 하다면 어떻게 command를 어떻게 사용할까요? 아래와 같은 형식대로 사용하면 됩니다.
/포함된 문자열/p
텍스트 파일에서 우리가 찾을 문자열이 포함된 줄을 출력(p, print)한다고 생각하시면 됩니다. 아래의 명령이 여성만 뽑아내는 command입니다.
sed -n -e ‘/F/p’ sed_test_file.txt
2. 특정 행 삭제 – d (delete)
행삭제에 관한 명령어는 d를 사용하면 됩니다. d를 사용하는 것외에는 위의 줄 출력을 해주는 명령어 형태로 사용하면 됩니다.
2-1. 2~6번째 줄을 삭제하고 나머지 모든 내용을 출력
sed -n -e ‘2,6d’ -e ‘1,$p’ sed_test_file.txt
name phone birth sex score nam 010-4321-7890 1996-06-20 M 75 sol 010-5911-1111 1976-10-12 F 60 lee 010-4949-4949 1988-09-30 F 80 feng 010-1111-9999 1979-03-20 M 90
3. 단어 치환(Substitute) – s (substitute)
이제부터는 출력결과는 생략하도록 하겠습니다. 특정 단어를 치환하려면 s명령을 이용하면 됩니다. 형식은 아래와 같습니다.
3.1 기본적인 특정 단어 치환
s/old/new/g s/old/new/gi
단어 s는 substitute(치환)의 약자, 그리고 /로 구분하여 old는 단어를 치환할 문자열, new는 새롭게 치환한 문자열인데 비어있으면 그 문자열을 삭제한 효과 를 가질 수 있습니다. g는 global의 약자로 전체에 적용됨을 의미합니다.
두번째의 i는 ignore case의 약자로 old의 단어를 검색할때 대소문자 구분하지 않겠다는 것을 의미합니다.
아래 명령의 결과를 보고 차이점을 확인해보세요.
sed -n -e ‘s/reakwon/reak/g’ -e ‘2p’ sed_test_file.txt sed -n -e ‘s/reakwoN/reak/g’ -e ‘2p’ sed_test_file.txt sed -n -e ‘s/reakwoN/reak/gi’ -e ‘2p’ sed_test_file.txt
3.2 특정 단어로 시작 혹은 끝나는 단어를 포함하는 라인의 문자열 치환
특정단어로 시작하는 단어로 문자열을 치환하는 것도 가능합니다. 특정 단어로 시작하는 줄을 선택하려면 앞에 ‘^’문자를 사용하면 되죠. 사실 정규표현식을 아신다면 앞에 ^가 붙는다면 ^이후에 나오는 문자열로 시작되는 문자열들을 추출한다는 것을 아실겁니다. 사실 몰라도 외워서 아시면 됩니다. 단 많이 실수하시는 부분이 특정 단어로 시작하거나 끝나는 문자열이 아닌 줄(line)입니다.
아래의 파일(let_it_go.txt)에서 Let으로 시작하는 줄의 첫 Let를 LET으로 바꿔보려면 다음 보이는 명령을 사용하면 됩니다.
Let it go, let it go. Can’t hold it back anymore. Let it go, let it go. Turn away and slam the door. I don’t care what they’re going to say. Let the storm rage on. The cold never bothered me anyway.
sed -n -e ‘s/^let/LET/gi’ -e ‘1,$p’ let_it_go.txt
반대로 끝나는 문자열은 끝에 $를 붙여줘서 검색하면 됩니다. Anyway. 으로 끝나는 줄의 Anyway를 대문자로 바꾸려면 아래와 같은 command를 사용하면 됩니다.
sed -n -e ‘s/anyway.$/ANYWAY/gi’ -e ‘1,$p’ let_it_go.txt
4. 문자열 추가 – a, i (append, insert)
문자열을 추가하는 방법에는 두 가지 정도가 존재합니다. 해당 문자열 아래에 추가하느냐(Append) 아니면 이 전 줄에 삽입하느냐(Insert)가 있는데요. 기본적인 형식은 아래의 command처럼 사용합니다.
/찾을 문자열/a\다음 출에 추가할 문자열 /찾을 문자열/i\위에 삽입할 문자열
찾을 문자열 뒤에 추가할 문자열을 위의 형식대로 사용하면 됩니다. 위의 let_it_go.txt파일에서 bye로 끝나는 줄 다음에 end라는 줄을 넣고 싶다면 이렇게 사용하면 됩니다. 반대로 위에 추가하려면 a를 i로 바꾸면 되겠죠.
sed -n -e ‘/bye/a\end’ -e ‘1,$p’ let_it_go.txt
5. 특정 행의 내용을 전부 교체 – c (change)
c command를 이용해서 행의 내용을 바꿀 수 있습니다. command 형태는 이렇습니다.
/바꿀 행이 포함한 문자열/c\바꿀 행의 내용
예를 들어 Let으로 시작하는 줄의 내용을 바꾸고 싶다면 어떻게 할까요? 우선 ^를 사용하여 Let으로 시작하는 줄들을 찾고 c 커맨드로 바꿔질 줄 내용을 입력해주시면 됩니다.
sed -n -e ‘/^Let/c\Let it go X2’ -e ‘1,$p’ let_it_go.txt
6. 특정 행에 파일의 내용을 추가 – r (read)
혹은 파일의 내용을 줄에다가 추가할 수도 있습니다. 여기 우리가 내용을 추가할 파일이 존재합니다.
perfect.txt
PERFECT! EXCELLENT!
100으로 끝나는 줄에 저 텍스트 파일의 내용을 아랫줄에 첨가하려면 아래와 같은 명령을 사용하면 됩니다.
sed -n -e ‘/100$/r perfect.txt’ -e ‘1,$p’ sed_test_file.txt
name phone birth sex score reakwon 010-1234-1234 1981-01-01 M 100 PERFECT! EXCELLENT! sim 010-4321-4321 1999-09-09 F 88 nara 010-1010-2020 1993-12-12 M 20 yut 010-2323-2323 1988-10-10 F 59 kim 010-1234-4321 1977-07-17 M 69 nam 010-4321-7890 1996-06-20 M 75 sol 010-5911-1111 1976-10-12 F 60 lee 010-4949-4949 1988-09-30 F 80 feng 010-1111-9999 1979-03-20 M 90
이상으로 sed에 대한 기본 개념과 사용방법, 그리고 예제를 살펴보았습니다. 여러분이 정규표현식을 사용하여 깊게 사용할 수도 있지만, 저는 정규표현식을 거의 사용할 일이 없으니 여기까지 하도록 하겠습니다. 이정도만 알아도 sed 명령을 사용하는 것에는 불편함이 없을 겁니다.
리눅스 명령어 sed에 대해서
sed 명령어는 편집에 특화된 명령어다.
sed = streamlined editor의 약자 (능률적인)
수정
치환
삭제
글 추가
등 편집기 기능을 수행할 수 있다.
vi, vim은 편집기를 열어서 수정하는 방식이라면, sed는 명령행에서 파일을 인자로 받고, sed 명령어를 통해 작업한 후에 결과를 화면으로 확인할 수 있다.
sed 명령어를 이용해서 파일을 변경할 경우엔 원본을 손상하지 않는다.
쉘 리다이렉션을 통해서 편집 결과를 저장하지 않는 이상 파일이 변경되지 않는다.
모든 결과는 명령을 수행한 화면으로 출력이 되고, 원본에는 손해가 없다는 것이 명령어의 특징이다.
원리를 자세히 알기 위해선, pattern space, hold space에 대한 개념이해가 돼야 하지만 해당 내용은 추후에 다루고, 일단 가장 대표적으로 많이 쓰이는 명령어들을 먼저 살펴보자.
아래와 같은 텍스트 파일이 있다고 해보자.
richet.txt
richet want to be richet
1) 특정 범위 만큼 파일 내용 출력
-n = 작업한 부분만 억제해서 출력하기 위해 사용하는 옵션
p = 프린트
, = 범위를 정함 1,3 = 1부터 3까지
$ = 끝
#첫 번째 라인만 출력 sed -n ‘1p’ richet.txt #richet #1~3번째 라인 출력 sed -n ‘1,3p’ richet.txt #richet #want #to #3번째 라인 부터 끝까지 sed -n ‘3,$p’ richet.txt #문서 전체
2) -e 옵션을 활용해서 여러 조건 출력
sed -n -e `1p` -e `3,$p` richet.txt #richet #to #be #richet
2) 파일에서 공백으로 이루어진 줄이나 빈줄 제거
/ = /사이에 들어있는 단어
d = delete의 약자
^ = 행의 시작
$ = 행의 끝
* = 메타문자로 앞의 문자를 0개이상 찾음
#1) 빈라인 모두 삭제 한 내용 출력 sed ‘/^$/`d richet #2) 빈라인 모두 삭제 한 내용 richet_new.txt로 저장 sed ‘/^$/`d richet > richet_new.txt #3) 0개 이상의 공백을 가진 = 빈줄 삭제 후 richet_new.txt 저장 sed ‘/^ *$/`d richet > richet_new.txt
3) 치환
richet이라고 돼 있는 부분을 euntaek으로 변경해보자.
s = switch의 약자. 치환할 때 사용하는 subcommand임.
g = 치환이 행에서 전체를 대상으로 이루어지는 것을 말함. (바꿀게 여러개 있으면 다 바꾼다는 것. 원래 sed는 행별로 하는데 g플래그를 쓰면 전체에서 다 뽑힘.)
i = 변경 대상 단어를 찾을 때 대소문자를 무시
#1) 파일 전체에서 richet이라는 단어를 찾아 euntaek으로 변경 sed ‘s/richet/euntaek/g’ richet.txt #2) 1)에서 수행한걸 리다이렉션을 통해 richet_new.txt로 저장 sed ‘s/richet/euntaek/g’ richet.txt > richet_new.txt #3) 대소문자를 무시하고 삭제 sed ‘s/richet/euntaek/gi’ richet.txt > richet_new.txt
4) 치환 with environment variable
아래와 같은 test 라는 파일이 있다고 했을 때
test
my name is $NAME
#!/bin/sh NAME=richet FILENAME=test envvar=`echo $NAME | tr ‘[a-z]’ ‘[A-Z]’` sed “s/\$NAME/$envvar/g” $FILENAME > $FILENAME.new
참고자료:
https://jhnyang.tistory.com/287
So you have finished reading the 리눅스 sed topic article, if you find this article useful, please share it. Thank you very much. See more: 리눅스 sed 옵션, 리눅스 sed 정규표현식, 리눅스 sed 치환, 리눅스 sed 파일 수정, 리눅스 sed 삭제, Sed ‘s, 리눅스 sed 추가, 리눅스 sed awk