ワイルドカードを使用して2つのパターンの間にテキストを印刷するには?

ワイルドカードを使用して2つのパターンの間にテキストを印刷するには?

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

おすすめ記事