링크 ux 변수 내용 의 삭제 와 교체

2432 단어 링크 ux 명령
셸 은 변 수 를 삭제 하고 교체 하 는 기능 을 내장 하여 매우 편리 합 니 다.평소 사용 하 는 기 회 는 드 물 지만 남 이 쓴 대본 을 읽 을 때 자주 만난다.그래서 학습 총 결 을 진행 하 겠 습 니 다.
${var#pattern}  从变量头部开始匹配模式,将符合的最短数据删除
${var##pattern} 从变量头部开始匹配模式,将符合的最长数据删除
${var%pattern}  从变量尾部开始匹配模式,将符合的最短数据删除
${var%%pattern} 从变量尾部开始匹配模式,将符合的最长数据删除
${var/oldPattern/newPattern}  将第一个符合旧模式的数据替换为新模式
${var//oldPattern/newPattern} 将全部符合旧模式的数据替换为新模式

\# 와% 는 기 호 를 삭제 합 니 다.키보드 에서\# 번 호 는 $의 왼쪽 에 있 기 때문에 왼쪽 부터 삭제 하고% 는 $문자 의 오른쪽 에 있 기 때문에 오른쪽 부터 삭제 합 니 다.
/교체 부호 입 니 다.
가장 많이 사용 되 는 장면: 1. 출력 파일 의 접미사
예 를 들 어 파일 의 접미사 이름 을 판단 하려 면
var 1 = me. txt echo ${var 1\# *.} txt 용\# 첫 번 째 점 과 이전 내용 이 일치 합 니 다. 삭제 하면 접미사 이름 txt 를 얻 을 수 있 습 니 다.
var = me. pdf. txt echo ${var\# *.} txt 파일 이름 에 점 이 있 으 면 이전 쓰기 가 실 효 됩 니 다. 이 때 는\# # # 로 최 장 데 이 터 를 일치 시 켜 야 합 니 다.
2. 출력 파일 이름
위의 예 와 같이 이번 에는 파일 이름 을 출력 하려 고 합 니 다.
echo ${var 1%%%.} me 에서 볼 수 있 습 니 다.% 는 오른쪽 에서 첫 번 째 점 과 오른쪽 문 자 를 삭 제 했 고 나머지 는 파일 이름 입 니 다.echo ${var%.} me. pdf 파일 이름 에 점 이 있 으 면 이전 쓰기 가 실 효 됩 니 다. 이 때% 로 가장 짧 은 매 칭 을 하면 됩 니 다.
3. 부분 문자 바 꾸 기
var = hello 123 hello 123 echo ${var/123/456} hello 456 hello 123 echo ${var/123/456} hello 456 hello 456 은 첫 번 째 조작 이 첫 번 째 123 을 456 으로 바 꾸 고 두 번 째 조작 은 모든 123 을 456 으로 바 꾸 는 것 을 볼 수 있 습 니 다.
개인 적 으로 셸 은 * 호 라 는 마스크 만 지원 합 니 다. 가장 짧 고 긴 데이터 와 일치 하 는 두 가지 모드 가 있 고 완전한 정규 표현 식 지원 이 없습니다.
인터넷 에서 이런 스 크 립 트 를 보 았 다.
##ipv4 or ipv6
tempIp="xxxx"
if [ "$tempIp" != "${#tempIp#*[0-9].[0-9]}" ]
then
    ##ipv4
else
    ##ipv6
fi

그 역할 은 ipv 4 주소 인지 ipv 6 주소 인지 판단 하 는 것 이다.그 원 리 는 이 규칙 에 맞 는 부분 을 삭제 하 는 것 입 니 다. 임의의 문자 + 1 개의 숫자 + 점 + 1 개의 숫자 를 시작 하기 때문에 ipv 4 주 소 는 반드시 일치 할 수 있 습 니 다.하지만 IPv 6 주 소 는 점 호 를 포함 하지 않 아 일치 하지 않 습 니 다.
root@debian2:~#
root@debian2:~# tempIp="192.168.0.103"
root@debian2:~#
root@debian2:~# echo ${tempIp#*[0-9].[0-9]}
68.0.103
root@debian2:~#
root@debian2:~#
root@debian2:~# tempIpv6="::1"
root@debian2:~#
root@debian2:~# echo ${tempIpv6#*[0-9].[0-9]}
::1
root@debian2:~#

그러나 이것 은 IPv 6 호 환 주소 에 점 이 있 는 상황 을 고려 하지 않 았 다.더 쉬 운 방법 은 IP 주소 에 콜론 이 포함 되 어 있 는 지 여 부 를 판단 하 는 것 이다.
##ipv4 or ipv6
tempIp="xxxx"
echo $tempIp | grep -q ":"
result=$?
if [ "$result" -eq 0 ]
then
    ##ipv6
else
    ##ipv4
fi

참고:https://blog.csdn.net/qq_31567335/article/details/80035510

좋은 웹페이지 즐겨찾기