첫 번째 및 마지막 문자열에서 텍스트 추출

첫 번째 및 마지막 문자열에서 텍스트 추출

첫 번째 단어와 마지막 단어와 일치하는 문자열에서 텍스트를 추출하고 싶습니다.

문자열은 경로입니다.

/path/to/the/file/app.apk(randomcharacters)

텍스트를 추출하고 싶습니다.

/path/to/the/file/app.apk

이와 같은 것을 사용하십시오

sed '/\/path/.apk/'

답변으로 sed 명령이 필요합니다.

답변1

POSIX 문자열 조작을 사용할 수 있습니다. 외부 명령이 필요하지 않습니다 sed.

s='/path/to/the/file/app.apk(randomcharacters)'
echo "${s%.apk*}.apk"

산출

/path/to/the/file/app.apk

이것은 실제로 귀하의 "임의의 문자"는 실제로 무작위가 아니므로 문자열을 포함하지 않습니다 .apk. 이 문자열을 포함할 수 있지만 경로(접두사)에 포함되지 않는다고 보장되는 경우 %로 바꿀 수 있습니다 %%.

답변2

경로가 동일한 패턴을 따르는 경우 .apk(somerandomcharracters)패턴 뒤의 모든 항목을 교체하여 제거할 수 있습니다 .apk. 원하지 않는 문자를 제거하는 방법에는 두 가지가 있습니다.

솔루션 1

sed "s/\(\.apk\).*/\1/g" <<< '/path/to/the/file/app.apk(characters)'

위 코드의 문제점은 디렉토리에 패턴이 포함되어 있으면 .apk출력 .apk(randomchars)이 예상한 것과 다르다는 것입니다.

sed "s/\(\.apk\).*/\1/g" <<< '/path/to/the/file.apk/app.apk(characters)'
#This will print:
/path/to/the/file.apk

솔루션 2 위의 문제를 피하려면 다음을 사용해야 합니다.

sed "s/\(.*\.apk\).*/\1/g" <<< '/path/to/the.apk212/file.apk12ll/app.apk(aa)dfd'
#This will print:
/path/to/the.apk212/file.apk12ll/app.apk

sed  "s/\(.*\.apk\).*/\1/g" <<< '/path/to/the/file/app.apk(aa)dfd'
#This will print 
/path/to/the/file/app.apk

그런데 나는 roaima의 답변을 사용하고 싶습니다.

관련 정보