Bash

從第一個和最後一個字元串中提取文本

  • October 4, 2022

我想從匹配第一個和最後一個單詞的字元串中提取文本

字元串是一個路徑:

/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。如果它們可能包含此字元串,但可以保證您的路徑(前綴)不包含它,那麼您可以替換%%%.

引用自:https://unix.stackexchange.com/questions/719629