답변:
전달한 명령 sed
: 줄이 정규식과 일치하면 삭제하십시오 . 그것은 당신이 원하는 것이 아닙니다.
echo "$TEST" | sed 's/rev0*//'
즉 , 각 줄에서 rev를 제거하고 임의의 수의 0을 제거하십시오.
또한, sed
간단한 일이 필요하지 않습니다 . bash와 해당 매개 변수 확장을 사용하십시오 .
shopt -s extglob # Turn on extended globbing.
echo "${TEST##rev*(0)}" # Remove everything from the beginning up to `rev`
# followed by the maximal number of zeroes.
몇 가지 옵션이 더 있습니다 (@choroba가 제안한대로 Parameter Expansion을 사용하는 것이 좋습니다).
사용 sed
또는 perl
모든하지만 마지막 두 문자와 마지막 두 문자를 대체 할 수 있습니다. 이것은 마지막 두 개를 제외한 모든 것을 효과적으로 삭제합니다.
$ sed -r 's/.*(..)/\1/' <<<$TEST
10
$ perl -pe 's/.*(..)/\1/' <<<$TEST
10
세트 awk
2 개 이상 0에의 필드 구분 기호와 마지막 필드를 인쇄 :
$ awk -F"00+" '{print $NF}' <<<$TEST
10
마지막 두 문자 만 추출하십시오.
$ grep -oP '..$' <<<$TEST
10
$ perl -lne '/(..)$/; print $1' <<<$TEST
10
마지막 10 번째 바이트 만 인쇄하십시오.
$ cut -b 10- <<<$TEST
10
위의 모든 사용 <<<$var
은 bash 구문입니다. 다른 쉘에서 사용하려면로 변경하십시오 echo "$TEST" | command
.
awk -F"[a-z]" '{print +$NF}'
"마지막 숫자"를 얻으려면 문자열 끝에서 임의의 숫자 시퀀스를 선택하고 10 진수로 변환하십시오.
배쉬로 :
[[ "$test" =~ ([1-9][0-9]*)$ ]] && echo "number: $((10#${BASH_REMATCH[1]}))"
grep로 :
echo "$test" | grep -Po "[1-9][0-9]*$"