LINUX 문자열 캡 처 및 절단

10425 단어 공부 하 다.
『 61599 』 문 제 는 Shell 을 사용 하여 각종 Linux 운영 임 무 를 수행 할 때 판단, 조건 테스트 등 과 관련 된 작업 이 있 을 때 관련 명령 출력 을 여과 하여 요구 에 부 합 된 문자열 을 추출 해 야 합 니 다.이 사례 는 문자열 의 일반적인 처리 작업 을 숙지 하고 다음 작업 을 수행 해 야 합 니 다. PPT 시범 작업 을 참고 하여 하위 문자열 캡 처, 교체 등 작업 을 수행 합 니 다. 수업 시간 에 따라 이름 을 바 꾸 는 스 크 립 트 를 작성 하고 개선 판 renfilex. sh 를 작성 합 니 다. 현재 디 렉 터 리 에 있 는 모든 파일 의 확장 자 를 대량으로 수정 할 수 있 습 니 다. 수정 전/후의 확장 자 는 위치 매개 변 수 를 통 해 $1,$2 프로젝트 하위 문자열 을 캡 처 하 는 세 가지 용법 을 제공 합 니 다: v a r: 시작 위치: 길이 e x p r s u b s t r "{var: 시작 위치: 길이} expr substr"var: 시작 위치: 길이 exprsubstr "var"시작 위치 길이 echo v a r: 8739 c u t - b 시작 위치 - 끝 위치 분할: 디 렉 터 리 위치: d i r n a m e "문자열"문서 의 기본 이름: b a s e n a m e "문자열"하위 문자열 을 바 꾸 는 두 가지 용법: 첫 번 째 일치 하 는 결과 만 바 꿉 니 다: var | cut - b 시작 위치 - 끝 위치 경로 분할: 디 렉 터 리 위치: dirname "문자열"문서 의 기본 이름: basename "문자열"하위 문자열 교체 의 두 가지 용법: 첫 번 째 일치 하 는 결과 만 바 꿉 니 다: var * 8739 ° cut - b 시작 위치 - 끝 위치 경로 분할: 디 렉 터 리 위치: dirname "문자열"문서 의 기본 이름: basename "문자열"하위 문자열 교체 의 두 가지 용법: 첫 번 째 일치 하 는 결과 만 바 꿉 니 다: {var/old/new}모든 일치 하 는 결 과 를 바 꿉 니 다: v a r/o l d/n e w 문자열 의 꼬 집 기: 왼쪽 에서 오른쪽으로, 가장 짧 은 일치 삭제: {var/old/new} 문자열 의 꼬 집 기: 왼쪽 에서 오른쪽으로, 가장 짧 은 일치 삭제: var/old/new 문자열 의 꼬 집 기: 왼쪽 에서 오른쪽으로, 가장 짧 은 일치 삭제: {변수 이름\# 키워드} 왼쪽 에서 오른쪽으로,최 장 일치 삭제: KaTeX parse error: 예상 '}', got '\#' 위치 5: {변수 이름\#̲#*키워드} 오른쪽 에서 왼쪽으로, 최 단 피... {변수 명% 키워드} 오른쪽 에서 왼쪽으로, 최 장 일치 삭제: ${변수 명% 키워드 *}단계 1: 문자열 의 캡 처 1) 방법 1. 표현 식 형식 사용: {} 표현 식 형식: 표현 식 형식: {var: 시작 위치: 길이} 변수 SCHOOL 을 정의 하고 문자열 의 길 이 를 확인 합 니 다.
[root@svr5 ~]# SCHOOL="Tarena IT Group."
[root@svr5 ~]# echo ${#SCHOOL}
16  										//  16   (   )

${} 캡 처 를 사용 할 때 시작 위 치 는 생략 할 수 있 고 생략 할 때 첫 번 째 문자 부터 캡 처 할 수 있 습 니 다.예 를 들 어 다음 작업 은 왼쪽 에서 6 개의 문 자 를 캡 처 할 수 있 습 니 다.
[root@svr5 ~]# echo ${SCHOOL::6}
Tarena

혹은
[root@svr5 ~]# echo ${SCHOOL:0:6}
Tarena

${} 방식 으로 문자열 을 캡 처 할 때 시작 위 치 는 0 에서 시 작 됩 니 다 (배열 아래 표 시 된 번호 와 유사 합 니 다).따라서 시작 위치 1 부터 6 자 를 캡 처 하면 이렇게 됩 니 다.
[root@svr5 ~]# echo ${SCHOOL:1:6}
arena 							//          ,   “arena ”

응용 예시: 파일/etc/fstab 의 MD5SUM 검사 와 문자열 을 추출 하고 텍스트 와 무관 한 것 을 제외 합 니 다.관련 조작 및 결 과 는 다음 과 같다.
[root@svr5 ~]# md5sum /etc/fstab  				//    MD5SUM   
eef0254e6049a411dc30db864c0ee6ea  /etc/fstab
[root@svr5 ~]# MD5STR=$(md5sum /etc/fstab) 		//     
[root@svr5 ~]# echo ${MD5STR::32}  		//   32   (MD5      )
eef0254e6049a411dc30db864c0ee6ea

2) 방법 2. expr substr 형식 을 사용 합 니 다. expr substr "$var"의 시작 위치 길 이 는 앞의 SCHOOL 변 수 를 예 로 들 어 원본 값 을 확인 합 니 다.
[root@svr5 ~]# echo $SCHOOL
Tarena IT Group.
[root@svr5 ~]# echo ${#SCHOOL}
16

expr substr 를 사용 하여 문자열 을 캡 처 할 때 시작 번 호 는 1 부터 시작 합 니 다. 이것 은 ${} 과 구분 되 어야 합 니 다.왼쪽 에서 SCHOOL 변수의 앞 글자 6 개 를 캡 처 합 니 다:
[root@svr5 ~]# expr substr "$SCHOOL" 1 6
Tarena

여기 서 주의 하 십시오. SCHOOL 변수의 값 에 빈 칸 이 있 기 때문에 두 개의 따옴표 를 추가 하여 호출 해 야 합 니 다. 그렇지 않 으 면 잘못 보 고 될 수 있 습 니 다.
[root@svr5 ~]# expr substr $SCHOOL 1 6
expr:     

왼쪽 에서 SCHOOL 변수의 11 - 16 번 째 문 자 를 캡 처 합 니 다.
[root@svr5 ~]# expr substr "$SCHOOL" 11 16
Group.

응용 예시: 파일/etc/fstab 의 MD5SUM 검사 와 문자열 을 추출 합 니 다. 텍스트 와 무관 합 니 다.expr substr 를 사용 하면 관련 조작 과 결 과 는 다음 과 같다.
[root@svr5 ~]# md5sum /etc/fstab  				//  MD5SUM   
eef0254e6049a411dc30db864c0ee6ea  /etc/fstab
[root@svr5 ~]# MD5STR=$(md5sum /etc/fstab) 		//     
[root@svr5 ~]# expr substr "$MD5STR" 1 32  		//   32   
eef0254e6049a411dc30db864c0ee6ea

3) 방식 3. cut 분할 도구 형식 을 사용 합 니 다: echo $var | cut - b 시작 위치 - 끝 위치 옵션 - b 는 바이트 에 따라 문 자 를 캡 처 하 는 것 을 표시 합 니 다. 그 중에서 시작 위치, 끝 위 치 는 모두 생략 할 수 있 습 니 다.시작 위 치 를 생략 할 때 첫 번 째 문자 부터 (번호 도 1 부터, expr 와 유사), 끝 위 치 를 생략 할 때 끝까지 캡 처 하 는 것 으로 간주 합 니 다.또한 앞의 SCHOOL 변 수 를 예 로 들 어 원시 값 을 확인 합 니 다.
[root@svr5 ~]# echo $SCHOOL
Tarena IT Group.
[root@svr5 ~]# echo ${#SCHOOL}
16

왼쪽 에서 앞의 6 자 를 캡 처 하면 다음 작업 을 수행 할 수 있 습 니 다.
[root@svr5 ~]# echo $SCHOOL | cut -b 1-6
Tarena

혹은
[root@svr5 ~]# echo $SCHOOL | cut -b -6
Tarena

11 - 16 번 째 문자 캡 처:
[root@svr5 ~]# echo $SCHOOL | cut -b 11-16
Group.

8 번 째 문자 에서 끝까지 캡 처:
[root@svr5 ~]# echo $SCHOOL | cut -b 8-
IT Group.

9 번 째 문자 와 같은 단일 문자 만 캡 처 합 니 다.
[root@svr5 ~]# echo $SCHOOL | cut -b 9
T

시작 위치, 끝 위 치 를 동시에 생략 하면 직접 echo 변수 값 과 다 를 것 이 없습니다.
[root@svr5 ~]# echo $SCHOOL | cut -b -
Tarena IT Group.

응용 예시: 파일/etc/fstab 의 MD5SUM 검사 와 문자열 을 추출 합 니 다. 텍스트 와 무관 합 니 다.cut 도 구 를 사용 하면 파 이 프 를 통 해 직접 처리 할 수 있 습 니 다. 관련 작업 과 결 과 는 다음 과 같 습 니 다.
[root@svr5 ~]# md5sum /etc/fstab  				//  MD5SUM   
eef0254e6049a411dc30db864c0ee6ea  /etc/fstab
[root@svr5 ~]# md5sum /etc/fstab | cut -b -32	//   32   
eef0254e6049a411dc30db864c0ee6ea

STEP 2: 문자열 의 교체 1) 첫 번 째 하위 문자열 형식 만 바 꿉 니 다: ${var/old/new} 앞의 SCHOOL 변 수 를 테스트 하고 변수 값 을 먼저 확인 합 니 다.
[root@svr5 ~]# echo  $SCHOOL
Tarena IT Group.

문자열 의 첫 번 째 r 를 RRR 로 바 꿉 니 다.
[root@svr5 ~]# echo  ${SCHOOL/r/RRRR}
TaRRRRena IT Group.

2) 모든 하위 문자열 형식 바 꾸 기: ${var/old/new} 앞의 SCHOOL 변 수 를 테스트 하고 변수 값 을 확인 합 니 다.
[root@svr5 ~]# echo  $SCHOOL
Tarena IT Group.

문자열 의 모든 r 를 RRR 로 바 꿉 니 다.
[root@svr5 ~]# echo  ${SCHOOL//r/RRRR}
TaRRRRena IT GRRRRoup.

3) 예 시 를 적용 하여 변수 값 에 따라 호스트 이름 을 재 설정 하고 현재 호스트 이름 의 도 메 인 접 두 사 를 'localdomain' 으로 대체 합 니 다.
[root@svr5 ~]# echo $HOSTNAME  						//        
svr5.tarena.com
[root@svr5 ~]# echo ${HOSTNAME/tarena.com/localdomain}
svr5.localdomain  									//      

현재 호스트 이름 전 체 를 "localhost. localdomain"으로 바 꿉 니 다.
[root@svr5 ~]# echo ${HOSTNAME/$HOSTNAME/localhost.localdomain}
localhost.localdomain

설정 할 새 호스트 이름 을 변수 MYFQDN 에 저장 하면 다음 과 같이 재 설정 합 니 다.
[root@svr5 ~]# MYFQDN="dbsvr.example.org"  				//      
[root@svr5 ~]# hostname ${HOSTNAME/$HOSTNAME/$MYFQDN}  	//    
[root@svr5 ~]# hostname  								//         
dbsvr.example.org

원래 호스트 이름 으로 복원 하려 면 변수 MYFQDN 의 값 을 수정 한 다음 교체 작업 을 다시 실행 하면 됩 니 다.
[root@svr5 ~]# MYFQDN="svr5.tarena.com"  				//         
[root@svr5 ~]# hostname ${HOSTNAME/$HOSTNAME/$MYFQDN}  	//     
[root@svr5 ~]# hostname  								//      
svr5.tarena.com

호스트 이름 을 저장 하기 위해 변 수 를 도입 하면 셸 스 크 립 트 가 더욱 광범 위 하 게 적 용 될 수 있 습 니 다.STEP 3: 문자열 의 일치 삭 제 는 시스템 의 기본 메 일 경 로 를 예 로 들 면 환경 변수 MAIL 을 직접 사용 할 수 있 습 니 다.
[root@svr5 ~]# echo $MAIL
/var/spool/mail/root

1) 왼쪽 에서 오른쪽으로, 가장 짧 은 일치 삭제 형식: ${변수 명\# 키워드} 왼쪽 첫 번 째 문자 에서 가장 가 까 운 키워드 인 "oo"부분 을 삭제 하고 어댑터 로 이해 합 니 다.
[root@svr5 ~]# echo ${MAIL#*oo}
l/mail/root

왼쪽 첫 번 째 문자 에서 가장 가 까 운 키워드 인 '/' 부분 을 삭제 합 니 다.
[root@svr5 ~]# echo ${MAIL#*/}
var/spool/mail/root

2) 왼쪽 에서 오른쪽으로, 가장 긴 일치 삭제 형식: ${변수 이름\# * 키워드} 왼쪽 첫 번 째 문자 에서 가장 먼 키워드 인 "oo"부분 을 삭제 합 니 다.
[root@svr5 ~]# echo $MAIL  					//    MAIL  
/var/spool/mail/root
[root@svr5 ~]# echo ${MAIL##*oo}
t

왼쪽 첫 번 째 문자 에서 가장 먼 키워드 인 '/' 부분 을 삭제 합 니 다.
[root@svr5 ~]# echo ${MAIL##*/}
root

${MAIL\#\# */} 동작 효 과 는 basename 명령 으로 기본 이름 을 추출 하 는 것 과 같 습 니 다.
[root@svr5 ~]# basename $MAIL
root

3) 오른쪽 에서 왼쪽으로, 가장 짧 은 일치 삭제 형식: ${변수 이름% 키워드 *} 오른쪽 마지막 1 글자 에서 왼쪽 가장 가 까 운 키워드 "oo"부분 을 삭제 합 니 다. * 마스크 로 이해 합 니 다.
[root@svr5 ~]# echo $MAIL  					//    MAIL  
[root@svr5 ~]# echo ${MAIL%oo*}
/var/spool/mail/r

오른쪽 마지막 문자 에서 왼쪽 가장 가 까 운 키워드 인 '/' 부분 을 삭제 합 니 다.
[root@svr5 ~]# echo ${MAIL%/*}
/var/spool/mail

${MAIL%/*} 동작 효 과 는 디 렉 터 리 이름 을 dirname 명령 으로 추출 하 는 것 과 같 습 니 다.
[root@svr5 ~]# dirname $MAIL
/var/spool/mail

4) 오른쪽 에서 왼쪽으로, 최 장 일치 삭제 형식: ${변수 이름%% 키워드 *} 오른쪽 마지막 1 글자 에서 왼쪽 가장 먼 키워드 'oo' 부분 삭제:
[root@svr5 ~]# echo $MAIL  					//    MAIL  
/var/spool/mail/root
root@svr5 ~]# echo ${MAIL%%oo*}
/var/sp

오른쪽 마지막 문자 에서 왼쪽으로 가장 먼 키워드 '/' 부분 삭제 (삭제):
[root@svr5 ~]# echo ${MAIL%%/*}

[root@svr5 ~]#

단계 4: renfilex. sh 스 크 립 트 작성 1) 원본 이름 변경 스 크 립 트 renfile. sh 의 효과 스 크 립 트 용 도 를 검증 합 니 다. 현재 디 렉 터 리 에 있 는 파일 확장 자 를 대량으로 수정 하고. doc 를. txt 로 변경 합 니 다.스 크 립 트 내용 은 다음 과 같 습 니 다.
[root@svr5 ~]# vim renfile.sh
#!/bin/bash
for FILE in *.doc
do
    mv $FILE  ${FILE%.doc}.txt
done
[root@svr5 ~]# chmod +x renfile.sh

테스트 용 폴 더 rendir 를 만 들 고 다음 테스트 파일 을 만 듭 니 다.
[root@svr5 ~]# mkdir rendir
[root@svr5 ~]# cd rendir
[root@svr5 rendir]# touch file1.doc abcde.doc xxyyzz.doc other1.xls killbill.mp4
[root@svr5 rendir]# ls
abcde.doc  file1.doc  killbill.mp4  other1.xls  xxyyzz.doc

renfile. sh 스 크 립 트 를 호출 하여 수정 결 과 를 봅 니 다.
[root@svr5 rendir]# ../renfile.sh
[root@svr5 rendir]# ls
abcde.txt  file1.txt  killbill.mp4  other1.xls  xxyyzz.txt

2) 개선 판 스 크 립 트 renfilex. sh 를 만 들 려 면 서로 다른 확장자 파일 의 수정 에 적응 하고 되 돌 릴 수 있 습 니 다.변경 전 확장자, 수 정 된 확장 자 는 위치 변 수 를 통 해 $1, $2 로 제 공 됩 니 다.개 선 된 스 크 립 트 작성 은 다음 과 같 습 니 다.
[root@svr5 rendir]# cp ../renfile.sh ../renfilex.sh
[root@svr5 rendir]# vim ../renfilex.sh
#!/bin/bash
for FILE in "$1"
do
    mv $FILE ${FILE%$1}"$2"
done

3) 개 선 된 스 크 립 트 를 검증, 테스트 하여 *. doc 파일 의 확장 자 를. txt 로 변경 합 니 다.
[root@svr5 rendir]# ls  							//   
abcde.txt  file1.txt  killbill.mp4  other1.xls  xxyyzz.txt
[root@svr5 rendir]# ../renfilex.sh .txt .doc
[root@svr5 rendir]# ls  							//   
abcde.doc  file1.doc  killbill.mp4  other1.xls  xxyyzz.doc

*. mp4 파일 의 확장 자 를. mkv 로 변경 합 니 다.
[root@svr5 rendir]# ls  							//   
abcde.doc  file1.doc  killbill.mp4  other1.xls  xxyyzz.doc
[root@svr5 rendir]# ../renfilex.sh .mp4 .mkv
[root@svr5 rendir]# ls  							//   
abcde.doc  file1.doc  killbill.mkv  other1.xls  xxyyzz.doc

좋은 웹페이지 즐겨찾기