CBX-1234
문자열 CBX-1234--CBX-5678
또는 에서 문자열을 가져오려고 합니다 CBX-12345--CBX-5678
. Mac OSX에서 bash 스크립트를 사용하고 sed를 사용하여 정규식을 실행하고 있습니다.
string="CBX-1234--CBX-5678"
shortenedString=$(echo "$string" | sed "s/^([A-Za-z]+-[0-9]+)/\1/")
그러면 다음과 같은 오류 메시지가 출력됩니다.
sed: 1: "s/^([A-Za-z]+-[0-9]+)/\1/": \1은 RE에 정의되지 않았습니다.
하위 문자열을 캡처하는 방법은 무엇입니까? bash에서 sed나 다른 수단을 사용하는 것에 대한 제안을 환영합니다.
답변1
확장 정규식을 사용하려면 명령줄 -E
에 다음을 추가해야 합니다 .sed
sed -E 's/^([A-Za-z]+-[0-9]+)/\1/'
CBX-1234--CBX-5678
문자열을 로 줄이려면 CBX-1234
전체 문자열을 고려하여 대체 항목도 수정해야 합니다.
sed -E 's/^([A-Za-z]+-[0-9]+).*/\1/'
bash
매개변수 확장을 사용할 수도 있습니다.
shortenedString="${string%%--*}"
$string
이렇게 하면 처음 발생한 이후의 모든 항목이 삭제됩니다 --
.
답변2
나는 항상 사용sed -r
$ echo "abhellocd" | sed -r "s/.*(hello).*/\1/g"
hello
sed 매뉴얼 페이지에서:
-r, --regexp-extended
use extended regular expressions in the script.
이 옵션 -E
은 내가 나열한 것이 아닙니다. 그것도 작동하지만.
답변3
당신은 그것을 사용할 수 있습니다 echo "$string" | cut -d "-" -f 1,2
.