从第一个和最后一个字符串中提取文本

从第一个和最后一个字符串中提取文本

我想从与第一个和最后一个单词匹配的字符串中提取文本

字符串是一个路径:

/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 的答案。

相关内容