我想从与第一个和最后一个单词匹配的字符串中提取文本
字符串是一个路径:
/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 的答案。