sed 다 중 줄 텍스트 처리

  1:sed    
  2:  sed      
  3:sed      
  4:sed      

1 사례 1: sed 기본 용법 1.1 문제
이 사례 는 sed 명령 의 p, d, s 등 일반적인 조작 을 숙지 하고 정규 표현 식 과 결합 하여 다음 과 같은 임 무 를 완성 해 야 합 니 다.
           、      
          、       
          
              

1.2 안
sed 텍스트 처리 도구 의 사용법:
  1:     | sed  [  ]  '    '
  2:sed  [  ]  '    '    .. ..

관련 설명 은 다음 과 같다.
         /  /
     ,       
      、 、 、    
  sed              ,    -n      
       -r  , sed      

1.3 단계
이 사례 를 실현 하려 면 다음 과 같은 절차 에 따라 진행 해 야 한다.
STEP 1: sed 도구 의 기본 옵션 인식
sed 명령 의 일반적인 옵션 은 다음 과 같 습 니 다.
- n (기본 출력 차단, 기본 sed 는 문 서 를 읽 는 모든 내용 을 출력 합 니 다)
- r (sed 로 확장 정규 지원)
- i (sed 는 원본 파일 을 직접 수정 합 니 다. 기본 sed 는 메모리 임시 수정 파일 일 뿐 원본 파일 에는 영향 이 없습니다)
1) sed 명령 의 - n 옵션
p 인쇄 등 필터 작업 을 수행 할 때 조건 에 맞 는 텍스트 를 보고 싶 습 니 다.그러나 어떤 옵션 도 사용 하지 않 을 때 기본 값 은 원본 텍스트 를 함께 출력 하여 필터 효 과 를 방해 합 니 다.예 를 들 어 sed 로 / etc / hosts 의 첫 번 째 줄 을 출력 하려 고 시도 합 니 다.
[root@svr5 ~]# sed '1p' /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

모든 줄 이 표 시 된 것 을 발견 할 수 있 습 니 다. (첫 번 째 줄 은 두 번 반복 합 니 다.)올 바른 용법 은 - n 옵션 을 추가 해 야 합 니 다. 그러면 첫 번 째 줄 만 표시 할 수 있 습 니 다.
[root@svr5 ~]# sed -n '1p' /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

줄 번 호 는 passwd 3 번 부터 6 번 째 줄 계 정의 정 보 를 인쇄 하 는 등 연속 적 인 줄 번호 일 수 있 습 니 다.
[root@svr5 ~]# sed  -n '3,6p' /etc/passwd
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

2) sed 명령 의 - i 옵션
정상 적 인 상황 에서 sed 명령 의 처 리 는 작업 결과 (인쇄, 삭제 등 포함) 를 현재 터미널 화면 에 출력 할 뿐 원본 파일 을 변경 하지 않 습 니 다.
[root@svr5 ~]# sed 'd' /etc/passwd                      //     
[root@svr5 ~]# cat /etc/passwd                          //      ,    

파일 내용 을 직접 수정 하려 면 옵션 - i 를 추가 해 야 합 니 다.
예 를 들 어 test. txt (임의의 내용 의 파일 을 직접 만 드 는 것) 의 1 ~ 4 줄 을 직접 삭제 합 니 다.
[root@svr5 ~]# sed -i '1,4d' test.txt            //    
[root@svr5 ~]# cat test.txt                      //      

다음 문장에서 sed 를 사용 하여 파일 을 수정 하 는 예시 에서 여러분 이 연습 과정 에서 오 작 동 으로 인해 시스템 이 고장 나 는 것 을 피하 기 위해 명령 은 생략 - i 옵션 을 선택 하고 하나하나 설명 하지 않 습 니 다.필요 할 때 이 옵션 을 스스로 추가 할 수 있 습 니 다.
3) 여러 명령 은 분점 격 리 를 사용 할 수 있다.
여러 작업 을 분점 으로 격 리 합 니 다. 예 를 들 어:
[root@svr5 ~]# sed -n '1p;4p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin

STEP 2: sed 도구 의 조건 인식 \ # sed [옵션] '조건 명령' 파일...
sed 명령 은 줄 번호 나 정규 를 조건 으로 일치 시 킬 수 있 습 니 다.
1) 줄 번호 사례
세 번 째 줄 인쇄:
[root@svr5 ~]# sed -n '3p' /etc/passwd

세 번 째 줄 에서 다섯 번 째 줄 인쇄:
[root@svr5 ~]# sed -n '3,5p' /etc/passwd

세 번 째 줄 과 다섯 번 째 줄 인쇄:
[root@svr5 ~]# sed -n '3p;5p' /etc/passwd

3 번 과 뒤의 10 줄 인쇄:
[root@svr5 ~]# sed -n '3,+10p' /etc/passwd

인쇄 홀수 줄:
[root@svr5 ~]# sed -n '1~2p' /etc/passwd

인쇄 짝수 줄:
[root@svr5 ~]# sed -n '2~2p' /etc/passwd

2) 정규 사례
루트 를 포함 하 는 줄 인쇄:
[root@svr5 ~]# sed -n '/root/p' /etc/passwd

bash 끝 줄 인쇄:
[root@svr5 ~]# sed -n '/bash$/p' /etc/passwd

3) 조건 이 없 으 면 모든 줄 에 일치 함
[root@svr5 ~]# sed -n 'p' /etc/passwd

단계 3: sed 도구 의 p, d, s 조작 명령 사례 집합
1) sed 도구 의 p 명령 사례 모음 을 살 펴 보 겠 습 니 다. (스스로 a. txt 파일 을 미리 생 성 합 니 다)
[root@svr5 ~]# sed  -n 'p' a.txt            //     ,   cat a.txt
[root@svr5 ~]# sed  -n '4p' a.txt            //   4 
[root@svr5 ~]# sed  -n '4,7p' a.txt        //   4~7 
[root@svr5 ~]# sed  -n '4,+10p' a.txt        //   4     10   
[root@svr5 ~]# sed  -n '/^bin/p' a.txt        //   bin    
[root@svr5 ~]# sed  -n '$=' a.txt            //       

2) sed 도구 의 d 명령 사례 모음 을 살 펴 보 겠 습 니 다. (자신 이 a. txt 파일 을 미리 만 듭 니 다)
[root@svr5 ~]# sed  '3,5d' a.txt             //   3~5 
[root@svr5 ~]# sed  '/xml/d' a.txt            //      xml  
[root@svr5 ~]# sed  '/xml/!d' a.txt         //     xml  ,!      
[root@svr5 ~]# sed  '/^install/d' a.txt    //   install    
[root@svr5 ~]# sed  '$d' a.txt                //         
[root@svr5 ~]# sed  '/^$/d' a.txt             //      

3) sed 명령 의 s 대체 기본 기능 (s / 오래된 내용 / 새로운 내용 / 옵션):
[root@svr5 ~]# vim  test.txt                //    
2017 2011 2018
2017 2017 2024
2017 2017 2017
[root@svr5 ~]# sed 's/2017/xxxx/'           test.txt
[root@svr5 ~]# sed 's/2017/xxxx/g'          test.txt
[root@svr5 ~]# sed 's/2017/xxxx/2'          test.txt
[root@svr5 ~]# sed 's/2017//2'              test.txt
[root@svr5 ~]# sed -n 's/2017/xxxx/p'      test.txt

4) sed 도구 의 s 명령 사례 모음 을 살 펴 보 겠 습 니 다. (자신 이 a. txt 파일 을 미리 만 듭 니 다)
메모: 교체 작업 의 구분 "/" 는 다른 문자 로 바 꿀 수 있 습 니 다. 예 를 들 어 \ #, & 등 은 파일 경 로 를 수정 할 수 있 습 니 다.
[root@svr5 ~]# sed 's/xml/XML/'  a.txt        //       xml   XML
[root@svr5 ~]# sed 's/xml/XML/3' a.txt     //      3 xml   XML
[root@svr5 ~]# sed 's/xml/XML/g' a.txt     //    xml    XML
[root@svr5 ~]# sed 's/xml//g'     a.txt     //    xml   (     )
[root@svr5 ~]# sed 's#/bin/bash#/sbin/sh#' a.txt  // /bin/bash   /sbin/sh
[root@svr5 ~]# sed '4,7s/^/#/'   a.txt         //  4~7    (   # )
[root@svr5 ~]# sed 's/^#an/an/'  a.txt         //   #an       (     # )

STEP 4: sed 를 이용 하여 본 사례 가 요구 하 는 임 무 를 완성 합 니 다.
참고 자료 파일 내용 은 다음 과 같 습 니 다.
[root@svr5 ~]# cat nssw.txt
Hello the world
ni hao ma beijing

이 소절 의 조작 은 nssw. txt 를 테스트 파일 로 사용 합 니 다.
1) 각 줄 의 두 번 째, 마지막 문 자 를 삭제 합 니 다.
두 번 으로 나 누 어 교체 작업 을 합 니 다. 첫 번 째 는 두 번 째 문 자 를 교체 하고 두 번 째 는 마지막 문 자 를 교체 합 니 다.
[root@svr5 ~]# sed 's/.//2 ; s/.$//' nssw.txt 

2) 각 줄 의 첫 번 째, 마지막 첫 번 째 문 자 를 바 꿉 니 다.
각 줄 의 텍스트 는 '첫 번 째 문자', '중간 에 있 는 모든 문자', '마지막 첫 번 째 문자' 세 부분 으로 나 누 어 진 다음 에 교체 작업 을 통 해 '3 - 2 - 1' 순 으로 정렬 합 니 다.
[root@svr5 ~]# sed -r 's/^(.)(.*)(.)$/\3\2\1/' nssw.txt

3) 파일 의 모든 숫자 삭제
원본 파일 에 숫자 가 없고 줄 의 첫머리 에 빈 칸 이 없 기 때문에 조금 만 처리 하고 새로운 테스트 파일 을 생 성 합 니 다.
[root@svr5 ~]# sed 's/[0-9]//' nssw.txt

nssw2. txt 파일 을 예 로 들 면 모든 숫자, 줄 의 첫 번 째 빈 칸 을 삭제 하 는 작업 은 다음 과 같 습 니 다.
[root@svr5 ~]# sed -r 's/[0-9]//g;s/^( )+//' nssw2.txt

4) 파일 의 대문자 마다 괄호 추가
"()" 를 사용 하면 보존 기능 을 실현 할 수 있 으 므 로 다음 작업 을 참고 하여 해결 할 수 있 습 니 다.
[root@svr5 ~]# sed 's/([A-Z])/[\1]/g' nssw.txt

2 사례 2: sed 를 사용 하여 시스템 설정 2.1 문 제 를 수정 합 니 다.
이 사례 는 수업 중의 sed 응용 사례 를 숙지 하고 스 크 립 트 anonftp. sh 를 작성 하여 다음 과 같은 기능 을 실현 하도록 요구 합 니 다.
  yum  vsftpd   
  vsftpd    ,      
  /var/ftp/pub    ,    
  vsftpd  ,        

2.2 단계
이 사례 를 실현 하려 면 다음 과 같은 절차 에 따라 진행 해 야 한다.
단계 1: 익명 FTP 서 비 스 를 설치 하기 위해 anonftp. sh 스 크 립 트 를 작성 합 니 다.
1) 임무 수요 및 사고 분석
vsftpd 서비스의 설치, 디 렉 터 리 권한 변경, 서비스 시작 등 작업 은 스 크 립 트 에 직접 쓸 수 있 습 니 다.
vsftpd. conf 설정 을 수정 하 는 작업 은 sed 명령 을 사용 할 수 있 습 니 다. 기본 설정 에 따라 \ # anon 으로 시작 하 는 줄 로 위치 하고 시작 하 는 설명 을 제거 하면 됩 니 다.
2) 실현 방향 에 따라 스 크 립 트 파일 작성
[root@svr5 ~]# vim anonftp.sh
#!/bin/bash
yum -y install vsftpd                             //  vsftpd  
cp /etc/vsftpd/vsftpd.conf{,.bak}                  //         
sed -i "/^#anon/s/^#//" /etc/vsftpd/vsftpd.conf      //      
chmod 777 /var/ftp/pub                              //      
systemctl start vsftpd                              //    
systemctl enable vsftpd                            //      
[root@svr5 ~]# chmod +x anonftp.sh
[root@svr5 ~]# ./anonftp.sh

3 사례 3: sed 다 중 줄 텍스트 처리 3.1 문제
이 사례 는 sed 도 구 를 사용 하여 다음 작업 을 완성 해 야 합 니 다.
         
  hosts  ,        :192.168.4.5   svr5.tarena.com、svr5,  119.75.217.56 www.baidu.com

3.2 프로젝트 \ # sed [옵션] '조건 명령' 파일..
sed 도구 의 다 중 텍스트 처리 동작:
i:            
a:           
c:      

3.3 단계
기본 문법 형식 사례:
메모: 시스템 에 기본적으로 a. txt 파일 이 없습니다. 테스트 파일 을 만들어 야 합 니 다!!
[root@svr5 ~]# sed  '2a XX'   a.txt            //      ,  XX
[root@svr5 ~]# sed  '2i XX'   a.txt            //      ,  XX
[root@svr5 ~]# sed  '2c XX'   a.txt            //       XX

이 사례 를 실현 하려 면 다음 과 같은 절차 에 따라 진행 해 야 한다.
단계 1: 호스트 이름 프로필 수정
1) 수정 전 설정 확인
[root@svr5 ~]# cat /etc/hostname
svr5.tarena.com

2) sed 를 사용 하여 호스트 이름 설정 에 있 는 내용 을 수정 합 니 다 (c 줄 바 꾸 기)
[root@svr5 ~]# sed  '1c mysvr.tarena.com' /etc/hostname 

단계 2: hosts 파일 수정, 새로운 기록 추가
1) 수정 전 설정 확인
[root@svr5 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

2) sed 를 사용 하여 hosts 파일 을 수정 하고 두 줄 의 신기록 을 추가 합 니 다 (a 추가)
[root@svr5 ~]# sed  -i  '$a 192.168.4.5  svr5.tarena.com svr5'  /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.4.5  svr5.tarena.com svr5

4 사례 4: sed 종합 스 크 립 트 응용 4.1 문제
이 사례 는 스 크 립 트 getupwd. sh 를 작성 하여 다음 과 같은 요 구 를 실현 하도록 요구 합 니 다.
    bash   Shell     
       shadow    
   “    -->     ”   getupwd.log,  -1  

그림 - 14.2 방안
기본 적 인 사고방식 은 다음 과 같다.
  sed      Shell /bin/bash     ,       /tmp/urec.tmp,       
   while           ,      
         ,              、    
         /tmp/getuupwd.log  
           ,      

4.3 단계
이 사례 를 실현 하려 면 다음 과 같은 절차 에 따라 진행 해 야 한다.
STEP 1: getupwd. sh 스 크 립 트 작성
[root@svr5 ~]# vim ./getupwd.sh  
#/bin/bash
A=$(sed -n '/bash$/s/.*://p' /etc/passwd)             ##            
for i in  $A                                         ##      
do
    pass1=$(grep $i /etc/shadow)
    pass2=${pass1#*:}
    pass=${pass2%%:*}
    echo  "$i   --> $pass"
done
[root@svr5 ~]# chmod +x ./getupwd.sh 

단계 2: 테스트, 실행 결과 검증
[root@svr5 ~]# ./getupwd.sh     
      ,      /tmp/getupwd.log
[root@svr5 ~]# less /tmp/getupwd.log 
root --> $6$IWgMYmRACwdbfwBo$dr8Yn983nswiJVw0dTMjzbDvSLeCd1GMYjbvsDiFEkL8jnXOLcocBQypOCr4C6BRxNowIxjh6U2qeFU0u1LST/
zengye --> $6$Qb37LOdzRl5995PI$L0zTOgnhGz8ihWkW81J.5XhPp/l7x2./Me2ag0S8tRndCBL9nIjHIKkUKulHxJ6TXyHYmffbVgUT6pbSwf8O71
clamav --> !!
mysql --> !!
abc --> !!
.. ..

상기 참고 스 크 립 트 를 통 해 sed 를 사용 하여 필드 추출 을 실현 하 는 것 이 비교적 복잡 하 다 는 것 을 알 수 있 습 니 다.다음 과정 에 서 는 awk 명령 을 배 울 것 입 니 다. 더 간단 한 방법 으로 이 스 크 립 트 내용 을 개선 할 수 있 습 니 다.
총 결 지식 포인트:
\ # sed [옵션] '조건 명령' 파일
옵션:
- n 기본 출력 차단
- r 확장 정규 지원
- i 원본 파일 수정
조건:
줄 번호 4, 5, 4 ~ 24, + 10
/ 정규 /
명령:
인쇄
삭제
s 교체 s / 구 / 신 / g
추가
i 삽입
c 줄 바 꾸 기

좋은 웹페이지 즐겨찾기