Linux Shell 스 크 립 트 프로 그래 밍 - sed 명령 상세 설명
17865 단어 Linux shell
sed 는 한 줄 의 내용 을 처리 하 는 온라인 편집기 입 니 다.처리 할 때 현재 처 리 된 줄 을 임시 버퍼 에 저장 하여 '패턴 공간' (pattern space) 이 라 고 부 릅 니 다. 이 어 sed 명령 으로 버퍼 의 내용 을 처리 하고 처리 가 완료 되면 버퍼 의 내용 을 화면 으로 보 냅 니 다.이 어 다음 줄 을 처리 하고 파일 이 끝 날 때 까지 반복 합 니 다.파일 내용 은 변경 되 지 않 았 습 니 다. 리 셋 저장 소 출력 을 사용 하지 않 는 한.Sed 는 주로 하나 이상 의 파일 을 자동 으로 편집 하 는 데 사 용 됩 니 다.파일 에 대한 반복 작업 간소화;변환 프로그램 작성 등.
sed 사용 매개 변수
[root@www ~]# sed [-nefr] [ ]
:
-n : (silent) 。 sed , STDIN 。 -n , sed ( ) 。
-e : sed ;
-f : sed , -f filename filename sed ;
-r :sed 。( )
-i : , 。
: [n1[,n2]]function
n1, n2 : , 『 』, , 10 20 , 『 10,20[ ] 』
function:
a : , a , ( )~
c : , c , n1,n2 !
d : , , d ;
i : , i , ( );
p : 。 p sed -n ~
s : , ! s ! 1,20s/old/new/g 。
행동 단위 의 추가/삭제
/etc/passwd 의 내용 을 열거 하고 줄 번 호 를 인쇄 하 는 동시에 2 ~ 5 줄 을 삭제 하 십시오!
[root@www ~]# nl /etc/passwd | sed '2,5d'
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
.....( ).....
sed 의 동작 은 '2, 5d' 입 니 다. 그 d 는 삭제 입 니 다!2 - 5 줄 이 삭제 되 었 기 때문에 표 시 된 데 이 터 는 2 - 5 줄 이 없습니다 ~ 그리고 주의 하 세 요. 원래 sed - e 를 내 려 야 하 는데 - e 가 없어 도 됩 니 다!또한 주의해 야 할 것 은 sed 뒤에 연결 하 는 동작 입 니 다. 반드시 '두 개의 작은 따옴표 로 묶 으 세 요!
두 번 째 줄 만 삭제 하면
nl /etc/passwd | sed '2d'
3 번 부터 마지막 줄 까지 삭제 해 야 합 니 다.
nl /etc/passwd | sed '3,$d'
두 번 째 줄 뒤에 (즉 세 번 째 줄 에 추가) 'drink tea?' 라 는 글 자 를 붙 여 라!
[root@www ~]# nl /etc/passwd | sed '2a drink tea'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
drink tea
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....( ).....
그럼 두 번 째 줄 앞에서
nl /etc/passwd | sed '2i drink tea'
두 줄 이상 늘 리 려 면 두 번 째 줄 뒤에 두 줄 을 넣 으 세 요. 예 를 들 어 'Drink tea or...' 와 'drink beer?'
[root@www ~]# nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer ?'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ......
drink beer ?
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....( ).....
줄 마다 "\"역 슬 래 쉬 줄 로 새 줄 을 추가 해 야 합 니 다!그래서 위의 예 에서 우 리 는 첫 줄 의 맨 뒤에\가 존재 한 다 는 것 을 발견 할 수 있다.
행동 단위 의 교체 와 표시
2 - 5 줄 의 내용 을 'No 2 - 5 number' 로 대체 할 까요?
[root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 number'
1 root:x:0:0:root:/root:/bin/bash
No 2-5 number
6 sync:x:5:0:sync:/sbin:/bin/sync
.....( ).....
이 방법 을 통 해 우 리 는 데 이 터 를 줄 전체 로 대체 할 수 있다!
/etc/passwd 파일 의 5 - 7 줄 만 표시 합 니 다.
[root@www ~]# nl /etc/passwd | sed -n '5,7p'
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
이 sed 의 행동 단위 표시 기능 을 통 해 특정한 파일 안의 줄 번 호 를 선택 하여 표시 할 수 있 습 니 다.
데이터 검색 및 표시
루트 키워드 가 있 는 줄 검색/etc/passwd
nl /etc/passwd | sed '/root/p'
1 root:x:0:0:root:/root:/bin/bash
1 root:x:0:0:root:/root:/bin/bash
2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3 bin:x:2:2:bin:/bin:/bin/sh
4 sys:x:3:3:sys:/dev:/bin/sh
5 sync:x:4:65534:sync:/bin:/bin/sync
....
루트 를 찾 으 면 모든 줄 을 출력 하 는 것 외 에 일치 하 는 줄 을 출력 합 니 다.
- n 을 사용 할 때 템 플 릿 을 포함 하 는 줄 만 인쇄 합 니 다.
nl /etc/passwd | sed -n '/root/p'
1 root:x:0:0:root:/root:/bin/bash
데이터 검색 및 삭제
루트 를 포함 하 는 모든 줄, 다른 줄 출력 삭제/etc/passwd
nl /etc/passwd | sed '/root/d'
2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3 bin:x:2:2:bin:/bin:/bin/sh
....
# root
데이터 검색 및 실행 명령
일치 하 는 모드 eastern 줄 을 찾 으 면,
/etc/passwd 를 검색 하여 루트 에 대응 하 는 줄 을 찾 습 니 다. 뒤에 있 는 괄호 에 있 는 명령 을 실행 하고 명령 마다 분점 으로 구분 합 니 다. 여기 서 bash 를 blueshell 로 바 꾸 고 이 줄 을 출력 합 니 다.
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'
1 root:x:0:0:root:/root:/bin/blueshell
/etc/passwd 의 첫 번 째 bash 키워드 만 blueshell 로 바 꾸 면 종료 합 니 다.
nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}'
1 root:x:0:0:root:/root:/bin/blueshell
마지막 q 는 종료 입 니 다.
데이터 검색 및 교체
전체 줄 의 처리 모델 을 제외 하고 sed 는 행위 단위 로 일부 데 이 터 를 검색 하고 대체 할 수 있다.기본적으로 sed 의 검색 은 vi 와 비슷 합 니 다!그 는 약간 이렇다.
sed 's/ / /g'
먼저 원본 정 보 를 관찰 하고/sbin/ifconfig 를 이용 하여 IP 조회
[root@www ~]# /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
.....( ).....
이 컴퓨터 의 ip 은 192.168.100 입 니 다.
IP 앞부분 삭제
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'
192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
다음은 후속 부분 을 삭제 하 는 것 입 니 다. 즉,: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
IP 뒷부분 삭제
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
192.168.1.100
다 중 편집
sed 명령 으로/etc/passwd 세 번 째 줄 에서 끝까지 데 이 터 를 삭제 하고 bash 를 blueshell 로 대체 합 니 다.
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
1 root:x:0:0:root:/root:/bin/blueshell
2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
- e 는 다 중 편집 을 표시 합 니 다. 첫 번 째 편집 명령 은/etc/passwd 세 번 째 줄 에서 끝까지 의 데 이 터 를 삭제 하고 두 번 째 명령 은 bash 를 검색 하여 blueshell 로 대체 합 니 다.
파일 내용 직접 수정 (위험 동작)
sed 는 파일 의 내용 을 직접 수정 할 수 있 습 니 다. 파이프 명령 이나 데이터 흐름 을 사용 하지 않 아 도 됩 니 다!그러나 이 동작 은 원본 파일 로 직접 수정 되 기 때문에 시스템 설정 을 가지 고 테스트 하지 마 세 요!우 리 는 다운로드 한 regular 를 사용 합 니 다.express. txt 파일 테스트 해 보 세 요!
sed 를 이용 하여 regularexpress. txt 내 모든 줄 의 끝 이.. 이면 바 꿉 니 다!
[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt
sed 를 이용 하여 regularexpress. txt 마지막 줄 에 "\# This is a test"를 추가 합 니 다.
[root@www ~]# sed -i '$a # This is a test' regular_express.txt
$는 마지막 줄 을 대표 하고 a 의 동작 은 새로 추 가 됩 니 다. 따라서 이 파일 은 마지막 으로 "\# This is a test"를 추가 합 니 다!
sed 의 "- i"옵션 은 파일 내용 을 직접 수정 할 수 있 습 니 다. 이 기능 은 매우 도움 이 됩 니 다!예 를 들 어 100 만 줄 의 파일 이 있다 면 100 줄 에 어떤 문 자 를 추가 해 야 합 니 다. 이때 vim 을 사용 하면 미 칠 수 있 습 니 다!서류 가 너무 커서!그럼 어 떡 하지?sed 를 이용 하 라 고!sed 를 통 해 직접 수정/대체 하 는 기능 을 통 해 vim 로 수정 할 필요 가 없습니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
linux 셸 프로 그래 밍 의 변수01type cd 와 같은 bash 내 장 된 명령 을 tpye 를 통 해 볼 수 있 습 니 다.bash 환경 에서 명령 문자열 이 너무 길 면 우 리 는 \ 를 사용 하여 리 턴 키 를 바 꾸 고 두 줄 로 출력 할 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.