저는 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