문자열에서 단어로 시작하는 부분 문자열을 추출하는 방법

문자열에서 단어로 시작하는 부분 문자열을 추출하는 방법

저는 bash 스크립트를 작성 중인데 가끔 이런 일이 발생합니다. $path="things useless things... path/another/files1/useful/path/here"

그래서 "files1" 앞의 모든 단어와 텍스트를 제거하고 files1 뒤의 부분(포함)을 가져오려고 합니다.

이 예에서는 다음과 같습니다.files1/useful/path/here

그 이후의 부품을 구할 수 있지만 파일 1은 포함되지 않습니다.

어떻게 이를 달성할 수 있나요?

답변1

(파일 스크립트의 경우) 어떻습니까?

sed -n 's#\(path="\).*/\(files1/[^"]*"\)#\1\2#p' script

또는 값이 변수 내부에 있는 경우:


$ path="things useless things... path/another/files1/useful/path/here"

$ echo "/files1/${path##*/files1/}"

/files1/useful/path/here

답변2

다음 구문을 사용하여 변수 앞에서 ${var#pattern}가장 짧은 일치 항목을 제거 할 수 있습니다.pattern

$ path="things useless things... path/another/files1/useful/path/here"
$ echo "${path#*another/}" 
files1/useful/path/here

또는 표준 텍스트 구문 분석 도구를 사용할 수 있습니다. 예를 들어:

$ newPath=$(sed -E 's|.*(files1/)|\1|'<<<"$path")
$ echo $newPath 
files1/useful/path/here

답변3

이를 사용하고 있으므로 bash내장 정규식 엔진을 사용할 수도 있습니다.

$ path="things useless things... path/another/files1/useful/path/here"
$ [[ "$path" =~ /files1/.*$ ]] && echo "$BASH_REMATCH"
/files1/useful/path/here

관련 정보