일부 패턴 앞의 일부 텍스트를 제거하고 싶습니다. 예를 들어:
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.