shell_script

shell 기본 sed

sysman 2021. 7. 30. 11:55

 

sed [옵션] '어드레스 { 명령어 }' 대상 파일 (저장은 되지 않음)

 

 

sed [옵션] -f 스크립트파일 대상 파일

 

 

명령어 | sed [옵션] '{스크립트}'

 

 

1. 어드레스

옵션 내용
number 명시된 숫자에 해당하는 라인 번호일 경우 다음 명령어 수행
number~step 명시된 숫자에 해당하는 라인부터 명시한 단계만큼 해당 라인을 스킵한 다음 라인일 경우 다음 명령어 수행
$ 파일 마지막 라인일 경우 다음 명령어를 수행
/regexp/ 명시한 정규 표현식과 일치하는 라인일 경우 다음 명령어를 수행
\cregexpc 명시한 정규 표현식과 일치하는 라인일 경우 다음 명령어를 수행
0,addr2 1번째 라인부터 addr2가 포함된 라인까지가 범위이며, addr2는 정규 표현식이어야함
addr1,+N addr1이 포함된 라인부터 +N라인까지가 범위이며, addr1은 정규 표현식이어야 하며, N은 숫자여야함
addr1,~N addr1이 포함된 라인을 기준으로 N라인까지가 범위이며, addr1은 정규 표현식이여야 하며, N은 숫자여야함

-n 옵션은 대상파일 내용을 출력하지 않겠다 의미

5는 5번째라인 을 뜻하며, p는 print로 출력하라는 의미

 

1번쨰 라인부터 시작하여3라인마다 해당라인 번호 출력

'$ =' 는 마지막 라인번호 출력

'$ p' 는 마지막 라인의 내용을 출력 

 

문장 내용중 test 숫자 있는것 출력

 

1번쨰라인부터 /패턴/ 이 포함된 라인까지 대상범위를 출력

# Devel 부터 시작하는 라인에서 아래 3줄까지 출력

#Devel이 포함된 라인을 기준으로 3번째 라인까지 출력

 

 

0 or 1 어드레스 명령어

옵션 내용 옵션 내용
:label 라벨 i \ text 문자열 삽입
#comment 주석 q sed 스크립트 실행 종료
{ ... } 블록 Q sed 스크립트 실행 종료
= 현재 라인 번호 출력 r 파일명 파일 내용 추가
a \ text 문자열 추가 R 파일명 파일의 첫 라인 추가

test로 시작하는 라인부터 +3 라인까지의 라인번호 출력

 

-f 파일 옵션으로 파일을 이용해서 sed 실행

a \ text 는 해당 내용의 다음줄에 추가

172.10.2.3이 있는 다음 라인에 새주소 172.10.2.14 추가

i \ text 는 해당 내용의 이전줄에 추가

172.10.2.3에 있는 라인 위에 새주소 172.10.2.14 추가

test2.example.com 내용을 출력하지 않고 종료

아무것도 출력하지 않고 종료

r옵션은 172.10.2.13 라인 뒤에 sed-read.txt 파일을 읽어 모든 새 IP만 추가

R옵션은 r과 비슷하다. 172.10.2.13 라인 뒤에 sed-read.txt 파일을 읽어 첫번째 새 IP만 추가

 

 

어드레스 범위 명령어

옵션 설명
b label 라벨 호출
c \ text 앞에서 명시된 패턴이 포함된 라인을 text 문자열로 변경
d D 앞에서 명시된 패턴 삭제
h H 패턴 공간을 홀드 공간에 복사/추가
g G 홀드 공간을 패턴 공간에 복사/추가
l 입력된 데이터의 현재 라인 출력
l width 명시한 너비에 맞게 입력된 데이터의 현재 라인 ㄴ출력
n N 입력된 데이터의 다음 라인을 복사/추가
p P 현재 패턴 공간 출력
s/regexp/replacement/ 정규 표현식(regexp)에 해당하는 데이터를 그 다음 오는 데이터(replacement)로 변경함
t table / T label 앞에서 선언된 명령어를 실행 후 라벨로 분기
w 파일명 / W 파일명 명시한 파일에 현재 패턴 공간을 저장함
x 홀드와 패턴 공간의 컨텐츠를 교환
y/source/dest/ 패넡이 포함된 라인의 문자열(source)을 dest문자열로 변경

 

 

 

뉴라인에 상관없이 test가 포함된 라인 삭제

 

패턴 공간에 포함된 뉴라인을 인식한 후 test가 포함된 라인 삭제

h,H 옵션은 홀드 버퍼내용을 패턴버퍼로 복사

수정된 단어는 홀드버퍼에 저장 후 패턴 버퍼로 복사, 패턴 버퍼값을 출력해 줌 (원본은 그대로)

 

 

l : 현재 읽어들인 라인을 출력하는 명령어

Production이 포함된 라인부터 아래 3라인 까지 현재 읽어들인 라인 출력

l width :명시한 숫자만큼 라인의 너비를 보여줌 

20너비에 맞춰 보여주고 나머지 문자열은 다음 라인에 보여줌

n, N은 다음라인을 복사

입력된 랑니의 다음 라인 복사, 복사 후 출력 했으므로 복사한 값 출력

복사 전 출력을 했으므로 현재 입력된 라인 출력

소문자 p는 패턴 공간 내용을 그대로 출력

대문자 P는 패턴 공간을 출력하되, 뉴라인이 있는 라인은 뉴라인까지만 출력

첫번째 라인부터 nalee가 포함된 라인의 #을 공백으로 변경후 출력

t label, T label은 명시한 라벨로 분기하는 명령어

해당범위에 192.20.3이 있든 없든 label2로 분기하여 명령어 수행

해당 범위에 172.10.2가 없기 때문에 label2로 분기됨

 

w,W : 현재 패턴 내용을 파일로 저장

 

 

 

x : 패턴버퍼와 홀드 버퍼의 내용을 서로 바꿔줌

172.10.2를 192.20.3으로 변경하는 명령어 앞뒤로 패턴 버퍼와 홀드 버퍼의 내용을 서로 바꿔 출력

해당 내용 문자열이 변경 되지 않고 출력

패턴버퍼와 홀드 버퍼의 내용을 두 번 교환하여 파일이 수정되지 않음

 

y/source/dest/ 는 source위치에서 명시한 문자열을 dest에서 명시한 문자열로 변경할때 사용하는 명령어

 

 

 

sed 옵션

옵션 내용
-n, --quiet, --silent 현재 패턴공간을 출력하지 않음
-e 스크립트, --expression=스크립트 여러개의 스크립트를 실행할때 사용
-f 스크립트파일, --file=스크립트파일 스크립트 파일을 통해 sed를 실행할때 사용함
--follow-symlinks -i 옵션과 함께 사용할 경우 스크립트 실행 결과를 심볼릭 링크자체가 아닌 심볼릭 링크와 연결된 원본 파일에 적용
-i파일 확장자, --in-place=파일 확장자 스크립트 실행 결과를 파일에 바로 적용, 이때 파일 확장자를 명시하면, 변경 전 명시한 확장자를 가진 백업 파일을 생성
-c, --copy -i옵션과 함께 사용 가능, 파일명 뒤에 c가 붙은 백업 파일을 생성
-I N, --line-length=N I 명령어와 함께 사용할 수 있으며, 긴 문자열을 포함하는 파일의 내용을 확인할 경우 명시한 N만큼 라인 넓이를 설정
--posix POSIX확장 기능을 끔  POSIX확장을 지원하지 않는 시스템에서 sed를 실행해야 할 경우 POSIX확장 기능을 끄고, 스크립트를 검증할 수 있음
-r, --regexp-extended 스크립트에서 POSIX확장 정규식을 사용, sed는 기본적으로 확장 정규식을 인식하지 않음
-s, --separate sed는 기본적으로 여러 개의 파일을 하나의 파일로 간주하지만, -s 옵션을 사용하면 여러개의 파일을 각각 처리할 수 있음
-u, --unbuffered 대용량의 파일에서 스크립트 실행 결과를 터미널로 출력할 경우, -u옵션을 사용함녀 버퍼를 자주 비워 성능이 향상
-z, --null-data 구분 기호 null인 데이터의 문자열을 변경할때 사용
--help sed 사용법 및 도움말을 보여줌
--version 버전 정보를 보여줌

 

1번 라인에서 5번라인 까지 출력

-e 옵션을 사용하여 2개 이상의 스크립트 실행

스크립트 파일을 이용해 hosts의 ip 수정

-i 옵션 사용하여 hosts ip를 바로 수정

#test 밑에 바로 192.10.8 대역으로 바뀐것을 볼수 있음

-i 옵션 사용하여 hosts ip를 바로 수정 , 기존 내용이 .bak 파일로 생성

hosts.bak 는 기존 파일, hosts가 192.1.2로 변경된 파일

 

 

 

-i 로 변경

심볼릭 링크 내용 수정

--follow-symlinks 는 심볼릭 링크가 대상파일일 경우 사용하는 옵션, 이걸 빼면 심볼릭 링크가 파일로 변경됨

 

hostsc 파일 출력

192.10.8dmf 172.10.2로 변경

-ㅣ N은 명시한 숫자에 맞게 너비 조정하여 출력

-ㅣ 옵셔능ㄹ 사용하여 50으로 조정하고 ㅣ명령어 실행

 

-r은 확장 정규 표현식을 사용할 경우 

-r 옵션이 있어도 --posix옵션이 있으면 확장 정규 표현식이 적용 되지 않음

 

-s 옵션은 두개의 대상파일으 사용할 경우 대상파일을하나의 파일로 인식하는 것이 아니라, 각각의 파일로 인식하도록 할 경우 사용되는 옵션

가각 마지막 라인 번호 출력

 

-z, --null-data 옵션은 명령어 실행 결과 중 null에 의해 문자열 라인을 구분했을 경우 이를 구분하기 위해 사용

cpu단어가 포함된 txt 파일을 null값으로 구분하여 해당 파일 경로를 출력

이때 sed의 -z옵션을 사용하면 파일명 앞의 디렉토리 경로를 쉽게 변경, 이렇게 변경된 파일 경로는 xargs와 echo를 이용하여 스페이스로 구분된 파일로 경로 출력

스크립트 디렉토리에서 cpu라는 단어가 포함된 txt 파일 경로 검색

null값으로 구분된 파일명의 sed의 -z옵션을 사용하여 현재 디렉토리(./)기호 삭제

xargs를 이용해 null이 구분 기호로 되어 있는 문자열 출력

도움말

버전 정보

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'shell_script' 카테고리의 다른 글

shell - 환경변수 설정  (0) 2021.08.07
shell - system 관련 스크립트  (0) 2021.08.02
shell 기본 awk  (0) 2021.07.29
shell 기본 find  (0) 2021.07.29
shell 기본 grep  (0) 2021.07.27