2017-08-04 19 views
2

文字列からパターンを抽出して抽出しようとしています。私は、テキスト文字列に次のように一致する任意のパターンを抽出する必要があります。テキスト文字列のパターンを検索し、一致パターンを抽出します

10289 20244 

テキストファイル:

KBOS 032354Z 19012KT 10SM FEW060 SCT200 BKN320 24/17 A3009 RMK AO2 SLP187 CB DSNT NW T02440172 10289 20244 53009 

私は、次のbashのコードを使用してこれを達成しようとしています:

バッシュコード:

cat text_file | grep -Eow '\s10[0-9].*\s' | head -n 4 | awk '{print $1}' 

上記のコードは、10で始まり、その後に3つの数字が続く約5つの数字のグループを検索します。このパターンにマッチした後、コードは残りのテキスト文字列を出力し、20で始まる5つの数字の2番目のグループをキャプチャします。

現在のところ、このコードが失敗するため、これを達成するためにはより良い、より信頼できる方法が必要です。私が必要とする数値グループはスペースで区切られています。私は\sをコードのgrep部分に挿入することによってこれを説明しようとしました。

答えて

2

のgrep溶液:

grep -Eow '10[0-9]{3}\b.*\b20[0-9]{3}' text_file 

出力:

10289 20244 

  • [0-9]{3}は - 3桁

  • に一致します
  • - 次の単語境界

+1

これは '10289 12345 RMX 67890 FOO 20244 'にマッチするでしょう - それは望ましいですか? –

0
awk '{print $(NF-2),$(NF-1)}' text_file 

10289 20244 

プリントが続くと、前のものにします。

+0

このコードスニペットは質問を解決するかもしれませんが、[説明を含めて](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。あなたのコードに説明的なコメントを詰め込まないようにしてください。これは、コードと説明の両方の可読性を低下させます! – Machavity

0
awk '$17 ~ /^10[0-9]{3}$/ && $18 ~ /^20[0-9]{3}$/ { print $17, $18 }' text_file 

これは、フィールド17に「10xxx」、フィールド18に「20xxx」をチェックし、両方が一致したときにそれらを印刷します。