내 인수는 다음과 같습니다. My_Submit.sh May5_2014
인수에서 영감을 받아 새 변수를 생성하고 싶습니다. 이 변수는 다음과 같아야 합니다 May14_5
.
답변1
그리고 zsh
:
#! /bin/zsh -
set -o extendedglob
zmodload zsh/langinfo
date=${1?date not specified}
if
[[ $date = (#b)(${(vj[|])~langinfo[(I)ABMON_<1-12>]})(<1-31>)_20([0-9][0-9]) ]]
then
newdate=$match[1]$match[3]_$match[2]
else
print -ru2 -- $date is not in the right format
exit 1
fi
print -r New date is $newdate.
이는 로케일 데이터에서 약어 목록을 검색하는 모듈에 의해 수행됩니다 zsh/langinfo
. 사용자의 로케일에 관계없이 약어가 영어 약어여야 하는 경우에는 ${(vj[|])~langinfo[(I)ABMON_<1-12>]}
로 변경하면 됩니다 Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec
.
답변2
XXXY_ZZNN
단일 인수의 문자열이 숫자가 없는 임의 의 XXX
문자열이고 Y
일부 정수인 형식이라고 가정합니다. 여기서 Z
및 N
는 단일 문자입니다. 문자열에서 밑줄 주위의 합계를 으로 변환, 제거 및 XXXY_ZZNN
교환 XXXNN_Y
하려고 합니다 .ZZ
Y
NN
#!/bin/bash
if [[ $1 =~ ^([^[:digit:]]+)([[:digit:]]+)_..(..)$ ]]; then
printf -v variable '%s%s_%s' \
"${BASH_REMATCH[1]}" "${BASH_REMATCH[3]}" "${BASH_REMATCH[2]}"
else
echo 'Argument missing or on the wrong format' >&2
exit 1
fi
printf 'Variable = "%s"\n' "$variable"
여기서는 쉘이 정규식 일치를 사용하여 bash
입력 문자열의 일부를 식별합니다. 식이 일치하면 일치하는 문자열의 일부가 재배열되어 새 값을 형성합니다. 값은 명명된 변수에 할당됩니다 variable
(마지막에 출력).
테스트해보세요:
$ ./script May5_2014
Variable = "May14_5"
$ ./script Bumblebee10_1973
Variable = "Bumblebee73_10"
$ ./script Bumblebee10_173
Argument missing or on the wrong format
$ ./script Bumblebee10_ABCD
Variable = "BumblebeeCD_10"