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