Awk
如何使用萬用字元在 2 個模式之間列印文本?
我需要擷取兩個模式之間的文本,但這些模式可能包含變化的數字。此外,我只關心以該字母序列開頭的具有這種結構的行,任何其他序列或結構都應該被忽略。它們可以是我要擷取的左側的兩位數,但在右側,位數將保持不變
前任:
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/-.*//"
您可以嘗試
awk
使用-
來分隔標記: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