トリッキーなgrepコマンド

トリッキーなgrepコマンド

スペースで区切られたデータ行を含むテキストファイルがあります。

例:

B  345678  2005-12-21  4174  1  62  11111 16543 1911  786543,45

ただし、間隔がわずかに一致せず、時には追加されたタブもあると思われます。すべての行に常に表示される番号「62」の前の行を切り取る方法を見つける必要があります。この数字は常にすべての行に表示され、時には5桁の数字が続き、その後には常に別の5桁の数字が続きます。また、不一致のリスクを最小限に抑えるために、62の前にスペースを追加しました。

これまで私はこれを思い出しました。

grep " 62 [1-9][0-9][0-9][0-9][0-9] " file

これにより、5桁の数字が表示される行のみが提供されます。 62をgrepし、その後にオプションで5桁の数字、次に必要な5桁の数字を入力する方法が必要です。

これは可能ですか?

/ポール

ベストアンサー1

62をgrepし、その後にオプションで5桁の数字、次に必要な5桁の数字を入力する方法が必要です。

これは、後に1〜2個の5桁の数字があると言うのと同じで62、最初の数字だけを一致させるだけで十分です。さまざまな数のスペースを処理するのは簡単です。を使用する␣+か、[[:space:]]+タブを含めることができます。

だから、

grep -E ' 62 +[1-9][0-9]{4} '

または

grep -E '[[:space:]]62[[:space:]]+[1-9][0-9]{4}[[:space:]]'

もちろん、行全体が印刷されます。 62から始まる部分のみが必要な場合は、.*行末に一致するように追加し、-o一致する部分のみを印刷します。

grep -o -E '[[:space:]]62[[:space:]]+[1-9][0-9]{4}[[:space:]].*'

おすすめ記事