过滤输出以获取第一个破折号和数字之前的所有内容

过滤输出以获取第一个破折号和数字之前的所有内容

我需要过滤破折号和数字之前的所有可能的字符串

fcp-workflow-4.3.0-SNAPSHOT.zip

例子:

fcp-工作流程-4.3.0-SNAPSHOT.zip 

必须始终得到:fcp-workflow或无论名称是什么。

这个名字可能fcp-worklflow-something-another-4.1.3....意味着我不知道长度。

我尝试过使用cut -d,但由于长度可以改变,也许有一种方法grep可以完成这项工作。

以下是更多示例:

fcp-test-content-REVIEW-1.0-1.0.zip
dhl-pages-i18n-tags-blueprints-1.0.zip
GlobalLink Connect Plus-6.1.1_SP1.zip
logistics-ui-4.5.0-SNAPSHOT.zip"
logistics-ui-4.3.0-SNAPSHOT.zip"

答案1

您可以使用 bash 参数扩展来删除破折号和数字后面的最长字符串:

for file in *
do
  printf '%s turns into %s\n' "${file}" "${file%%-[[:digit:]]*}"
done

答案2

要获取第一个破折号之前的所有内容,后跟一个数字:

sed -E 's/-[[:digit:]].*$//' file

通过用空字符串替换从第一个破折号和数字到行尾。


对于你的例子,我看到了-i18n一条幸运地幸存下来的产品线。也许您希望有更严格的要求,例如匹配第一个破折号+数字+点+数字将如下所示:

sed -E 's/-[[:digit:]]+\.[[:digit:]]+.*$//' file

相关内容