2つのパターン間のテキストをキャプチャする必要がありますが、これらのパターンには変化する数字を含めることができます。また、その構造を持つ文字シーケンスで始まる行にのみ興味があり、他のシーケンスや構造は無視する必要があります。私がキャプチャしたい左側の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/-.*//"
ベストアンサー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