특정 패턴을 일치시킨 후 변수에서 텍스트를 제거하는 방법은 무엇입니까?

특정 패턴을 일치시킨 후 변수에서 텍스트를 제거하는 방법은 무엇입니까?

일부 패턴 앞의 일부 텍스트를 제거하고 싶습니다. 예를 들어:

VAR="This is a test script text and real script text."
PATTERN="test "

내가 원하는 출력은 다음과 같습니다.

NEW_VAR="script text and real script text."

답변1

사용 중인 쉘이 유형 매개변수 확장을 지원하는 경우 ${WORD##*STR}수행해야 할 작업은 다음과 같습니다.

printf '%s\n' "${VAR##*$PATTERN}"

새 변수에 저장하려면 명령 대체 트릭을 사용 $(..)하거나 printf서식이 지정된 문자열을 새 변수에 저장하는 데 사용되는 고유 기능을 사용하세요.

printf -v NEW_VAR '%s' "${VAR##*$PATTERN}"
printf '%s\n' "$NEW_VAR"

교체를 위해 셸을 사용하는 것이 sed또는 와 같은 외부 유틸리티를 분기하는 것보다 더 효율적입니다 awk.

에서 인용매개변수 확장 Bash Hackers Wiki

${PARAMETER##PATTERN}

이 양식은 일치를 시도하는 설명된 패턴에서 제거됩니다.문자열의 시작. 운영자는 ##가장 긴 텍스트 일치를 제거하려고 시도합니다.

답변2

필요하지 않음 printf- "매개변수 확장"을 사용하여 새 변수를 할당합니다.

NEW=${VAR#*$PATTERN}
echo $NEW
script text and real script text.

관련 정보