LINUX 문자열 캡 처 및 절단
10425 단어 공부 하 다.
[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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 두 수의 최대 공약수 구하 기 (세 가지 방법)자바 두 수의 최대 공약수 구하 기 (세 가지 방법) 1. 역법 전에 저도 몰 랐 습 니 다. 인터넷 에서 찾 아 봤 는데 0 과 0 이 아 닌 수의 약 수 는 모두 이 0 이 아 닌 숫자 입 니 다. 결실 2. 전...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.