첫 번째 단어와 마지막 단어와 일치하는 문자열에서 텍스트를 추출하고 싶습니다.
문자열은 경로입니다.
/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의 답변을 사용하고 싶습니다.