Bash
從第一個和最後一個字元串中提取文本
我想從匹配第一個和最後一個單詞的字元串中提取文本
字元串是一個路徑:
/path/to/the/file/app.apk(randomcharacters)
我想提取像
/path/to/the/file/app.apk
使用這樣的東西
sed '/\/path/.apk/'
只需要 sed 命令作為答案
如果您的路徑遵循相同的模式:
.apk(somerandomcharracters)
您可以通過在 pattern 之後替換 all 來刪除.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 的答案。
您可以使用 POSIX 字元串操作 - 無需外部命令,例如
sed
.s='/path/to/the/file/app.apk(randomcharacters)' echo "${s%.apk*}.apk"
輸出
/path/to/the/file/app.apk
這必然假定您的“隨機字元”不是真正隨機的,因此不包括字元串
.apk
。如果它們可能包含此字元串,但可以保證您的路徑(前綴)不包含它,那麼您可以替換%
為%%
.