셸 스 크 립 트 의 정규 표현 식 (2) --- sed 도구

sed 도구
sed 는 강력 하고 간단 한 텍스트 해석 변환 도구 로 텍스트 를 읽 을 수 있 으 며 지정 한 조건 에 따라 텍스트 내용 을 편집 (삭제, 교체, 추가, 이동 등) 하고 마지막 으로 모든 줄 을 출력 하거나 출력 만 처리 하 는 일부 줄 입 니 다.sed 도 상호작용 이 없 는 상황 에서 상당히 복잡 한 텍스트 처리 작업 을 실현 할 수 있 고 Shell 스 크 립 트 에 널리 응용 되 어 각종 자동화 처리 임 무 를 완성 할 수 있 습 니 다.
sed 작업 절차
1. 읽 기: sed 는 입력 흐름 (파일, 파이프, 표준 입력) 에서 한 줄 의 내용 을 읽 고 임시 버퍼 에 저장 합 니 다.2. 실행: 기본적으로 모든 sed 명령 은 패턴 공간 에서 순서대로 실 행 됩 니 다. 줄 의 주 소 를 지정 하지 않 으 면 sed 명령 은 모든 줄 에서 순서대로 실 행 됩 니 다.3. 디 스 플레이: 수 정 된 내용 을 출력 흐름 으로 보 냅 니 다.데 이 터 를 보 내 면 모드 공간 이 비 워 집 니 다.
sed 명령 용법
sed[  ] '  '   
sed [  ] -f scriptfile   

일반적인 sed 명령 옵션
-e  --expression=:                     。
-f  --file=:                    。
-h  --help:    。
-n、--quiet   silent:           。
-i:        。

'조작' 은 파일 작업 에 대한 동작, 즉 sed 명령 을 지정 하 는 데 사 용 됩 니 다.일반적으로 'n1 [, n2]' 조작 매개 변수 형식 을 사용 합 니 다.n1, n2 는 선택 할 수 있 는 것 으로 반드시 존재 하 는 것 이 아니 라 조작 할 줄 수 를 선택 하 는 것 을 대표 합 니 다.
일반적인 조작 옵션
a:  ,              。
c:  ,           。
d:  ,      。
i:  ,              。
p:  ,       ,       ;      ,         ;        ,   ASCII    。    “-n”      。
s:  ,      。
y:    。

프 리 젠 테 이 션
1. 조건 에 맞 는 텍스트 출력 (p 는 정상 출력 표시)
[root@localhost opt]# sed -n 'p' /etc/passwd       //      ,   cat   
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
......
sed -n '5p' /etc/passwd        //   5    
sed -n '3,5p'  /etc/passwd        //  3 5    
sed -n 'p;n' /etc/passwd        //          ,n         
sed -n 'n;p'  /etc/passwd        //          
sed -n '1,5{p;n}' /etc/passwd  //  1~5      
 sed -n '22,${n;p}' /etc/passwd  //   22         

이상 은 sed 명령 의 기본 용법 입 니 다. sed 명령 이 정규 표현 식 과 결합 할 때 형식 이 약간 다 르 고 정규 표현 식 은 '/' 로 둘러싸 여 있 습 니 다.
sed 명령 과 정규 표현 식 을 결합 하여 사용 합 니 다.
[root@localhost opt]# sed -n '/sbin/p' /etc/passwd       //    sbin  
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
......
[root@localhost opt]# sed -n '2,/sbin/p' /etc/passwd       //    2         sbin        
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost opt]# sed -n '/sbin/=' /etc/passwd       //    sbin     ,  (=)      
2
3
4
5
6
7
8
......
[root@localhost opt]# sed -n '/^ssh/p' /etc/passwd      //   ssh    
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[root@localhost opt]# sed -n '/[0-9]$/p' test.txt       //         
PI=3.141592653589793238462643383249901429
[root@localhost opt]# sed -n '/\/p' test.txt       //      wood   ,\      
a wood cross!

2. 조건 에 맞 는 텍스트 (d) 아래 명령 에서 nl 명령 을 삭제 하여 파일 의 줄 수 를 계산 하고 이 명령 과 결합 하면 명령 이 실 행 된 결 과 를 더욱 직관 적 으로 볼 수 있 습 니 다.
nl test.txt | sed '3d'       //    3  
nl test.txt | sed '3,5d'         //    3~5  
nl test.txt |sed '/cross/d'      //    cross    
sed '/^[a-z]/d' test.txt           //           
sed '/\.$/d' test.txt             //   "."    
sed '/^$/d' test.txt              //      

[root@localhost opt]# nl test.txt | sed '3,5d'
1 he was short and fat.
2 He was wearing a blue polo shirt with black pants.
6   The year ahead will test our political establishment to the limit. 7    PI=3.141592653589793238462643383249901429
  :          ,           ,   “ sed –e ‘/^$/{n;/^$/d}’test.txt”      。    “cat -s test.txt”  ,n         。

3. 조건 에 맞 는 텍스트 를 sed 명령 으로 교체 할 때 s (문자열 교체), c (줄 / 블록 교체), y (문자 변환) 명령 옵션 을 사용 해 야 합 니 다.
sed 's/the/THE/' test.txt       //        the     THE 
sed 's/l/L/3' test.txt              //       3  l    L
sed 's/the/THE/g' test.txt          //       the    THE
sed 's/o//g' test.txt                //       o   (     )
sed 's/^/#/' test.txt                //       # 
sed '/the/s/^/#/' test.txt            //   the        # 
sed 's/$/EOF/' test.txt                 //          EOF 
sed '3,5s/the/THE/g' test.txt             //   3~5      the     THE
sed '/the/s/o/O/g' test.txt             //   the       o      O

4. 조건 에 맞 는 텍스트 옮 기기
H               ;
g   G             /      ;
w             ;
r               ;
a,           。
sed '/the/{H;d};$G' test.txt          //   the          ,{;}      sed '1,5{H;d};17G' test.txt         //   1~5         17   
sed '/the/w out.file' test.txt        //   the        out.file
sed '/the/r /etc/hostname' test.txt       //   /etc/hostname         the      
sed '3aNew' test.txt      //   3         ,    New 
sed '/the/aNew' test.txt          //   the           ,    New sed '3aNew1
New2' test.txt // 3 ,

5. 스 크 립 트 로 파일 을 편집 하고 sed 스 크 립 트 를 사용 하면 여러 개의 편집 명령 을 파일 에 저장 할 수 있 습 니 다 (줄 마다 편집 명령). "- f" 옵션 을 통 해 호출 할 수 있 습 니 다.
sed '1,6{H;d};18G' test.txt //   1~6        18   
[root@localhost opt]# vim try.list
1,6H
1,6d
18G

[root@localhost opt]# sed -f  try.list test.txt

6. sed 는 파일 을 직접 조작 하여 vsftpd 서비스 설정 을 조정 하 는 스 크 립 트 를 만 듭 니 다. 익명 사용 자 는 금지 되 지만 로 컬 사용 자 는 기록 할 수 있 습 니 다.
[root@localhost opt]#  vim aaa.sh
#!/bin/bash
#         、      
SAMPLE="/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf " CONFIG="/etc/vsftpd/vsftpd.conf"

#          ,      /etc/vsftpd/vsftpd.conf.bak         ,         cp         
[ ! -e "$CONFIG.bak" ] && cp $CONFIG $CONFIG.bak #           ,      
sed -e '/^anonymous_enable/s/YES/NO/g' $SAMPLE > $CONFIG
sed -i -e '/^local_enable/s/NO/YES/g' -e'/^write_enable/s/NO/YES/g' $CONFIG 
grep "listen" $CONFIG || sed -i '$alisten=YES' $CONFIG
#   vsftpd   ,          
systemctl restart vsftpd
systemctl enable vsftpd

[root@localhost opt]#  chmod +x aaa.sh 
[root@localhost opt]#  ./aaa.sh 

좋은 웹페이지 즐겨찾기