如何使用dash(-)
从以下字符串.zip
中提取上一个fooBar-5.3.8-78642.zip
和sed
之前的数字?
我想提取8-78642
。
答案 0 :(得分:2)
将您想要的部分与捕获组匹配,然后仅使用该反向引用替换整行。
echo "fooBar-5.3.8-78642.zip" | sed -r 's/.*\.([0-9]+-[0-9]+)\.zip$/\1/'
答案 1 :(得分:1)
要获得统一且可移植的解决方案(适用于所有sed
实施),请使用基于Basic Regular Expression (BRE)的以下方法:
echo "fooBar-5.3.8-78642.zip" | sed 's/.*\([[:digit:]]\+\-[[:digit:]]\+\)\.zip$/\1/'
基本正则表达式(BRE)是 sed 中的默认值(同样在 的grep)
<强> -------------------------------------------- -------------------- 强>
使用awk
语言的第二个简单替代方法(没有正则表达式):
echo fooBar-5.3.8-78642.zip | awk -F"." '{print $3}'
-F"."
- .
此处被视为字段分隔符
$3
- 指向第三个字段,即8-78642
<强> -------------------------------------------- -------------------- 强>
最后一个简单快捷的选择是使用cut
命令:
echo "fooBar-5.3.8-78642.zip" | cut -d'.' -f3
输出(对于上述每种方法):
8-78642