sed 다 중 줄 텍스트 처리
11834 단어 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 줄 바 꾸 기