bash는 "1.2.3-SNAPSHOT"에서 하위 문자열을 추출합니다.

bash는 "1.2.3-SNAPSHOT"에서 하위 문자열을 추출합니다.

bash의 1.2.3-SNAPSHOT에서 1.2.3 하위 문자열을 추출하는 방법은 무엇입니까?

나는 노력했다

echo '1.2.3-SNAPSHOT' | grep -o "^.*(?=(\-SNAPSHOT$))"

하지만 소용없어

이상적으로는 입력이 1.2.3 또는 1.2.3-SNAPSHOT인 경우 명령이 두 경우 모두 1.2.3을 반환하도록 하고 싶습니다.

답변1

bash 매개변수 확장충분할 것이다

var='1.2.3-SNAPSHOT'
echo "${var%%-*}"
1.2.3
var='1.2.3'
echo "${var%%-*}"
1.2.3

답변2

예를 들어 다음과 같이 할 수 있습니다. egrep다음과 같이 사용하세요:

echo "1.2.3-SNAPSHOT" | egrep -o '[0-9]+.[0-9]+.[0-9]'

설명하는 시나리오는 다음과 같습니다.

입력이 1.2.3 또는 1.2.3-SNAPSHOT인 경우 두 경우 모두 1.2.3이 반환됩니다.

하지만 버전이 "3.1.33"(세 번째 숫자에 더 많은 숫자 포함)과 같을 수도 있다고 생각합니다. 이 경우에는 하나만 추가해도 *괜찮을 것입니다 .

echo "3.12.32-SNAoiashfsof" | egrep -o '[0-9]+.[0-9]+.[0-9]*'

답변3

sed -ne's/^\(1\.2\.3\)\(-SNAPSHOT\)\{0,1\}$/\1/p' <in >out

...인쇄됩니다1.2.3다음 중 하나와 정확히 일치하는 입력 라인만 출력합니다.1.2.3또는1.2.3-SNAPSHOT.

답변4

또 다른 옵션...

echo "1.2.3-SNAPSHOT" | cut -d'-' -f1

관련 정보