我需要捕获两个模式之间的文本,但这些模式可能包含变化的数字。另外,我只关心具有该结构的以该字母序列开头的行,任何其他序列或结构都应被忽略。它们可以是我要捕获的左侧的两位数,但右侧的位数将保持不变
前任:
ab-cd-1.1.1.11-CAPTURE-11111111.xyz
或者
ab-cd-22.1.11.1-CAPTURE-11111112.xyz
如果我假设数字不会改变,但不确定如何考虑随机数,使用下面的命令我可以得到我需要的东西。任何帮助,将不胜感激。
echo "ab-cd-1.1.1.11-CAPTURE-11111111.xyz" | sed "s/.*ab-cd-1.1.1.11-//;s/-.*//"
答案1
您可以尝试awk
使用 using-
来分隔令牌:
awk -F\- '{print $4}' input_file
如果您想应用其他过滤器,这是一种可能的方法:
<exec some filter based on other fields> input_file|awk -F\- '{print $4}'
根据您编辑的答案,如果您希望字符串以ab-cd
脚本开头,则为
awk -F\- '$1=="ab" && $2=="cd" {print $4}' input_file
根据最后的要求,这是脚本:
awk -F\- '$1=="ab" && $2=="cd" {split($5,a,"."); if (int(a[1])==a[1] && length(a[1])==8) print $4}' input_file
我的测试文件:
cat qq
ab-cd-1.1.1.11-CAPTURE-11111111.xyz
ab-cd-1.1.1.11-CAPTURa-1111111a.xyz
ab-cd-1.1.1.11-CAPTURb-1111111.xyz
ab-cd-1.1.1.11-aAPTURE-a1111112.xyz
awk -F\- '$1=="ab" && $2=="cd" {split($5,a,"."); if (int(a[1])==a[1] && length(a[1])==8) print $4}' qq
CAPTURE
答案2
每当有什么东西需要找出来时,我都会 grep
从工具箱里拿出来。
$ grep -oP '\d+(?:\.\d+)+-\K[^-]+(?=-\d+)' file