sedまたはawkを使用してファイルから特定の行を抽出する方法

sedまたはawkを使用してファイルから特定の行を抽出する方法

ファイルから日付(「5月1日」など)で始まるすべての行を検索するには、sedまたはawkを使用してどうすればよいですか?このデータを抽出して画面またはファイルに送信する必要があります。ありがとうございます。

答え1

次に始まる行を抽出するにはMay 1:

grep "^May 1\b" file

または:

sed -n '/^May 1\>/p' file

または:

awk '/^May 1\>/' file

\>上記の2つは、単語境界正規表現をサポートするGNU awkやsedなどのツールがあると想定しています。単語境界の目的は、正規表現の一致を防ぐことです(例:)May 10

もっと

5月のある日を探している場合:

grep -E "^May [[:digit:]]{1,2}\b" file

ある月の特定の日付を探している場合:

grep -E "^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [[:digit:]]{1,2}\b" file

答え2

printf %s\\n 'Apr 30 aaa' \
             'May 1 bbb' \
             'Feb 29 ccc' \
             'Feb 30 ddd' |

sed -n '/^\(Apr\|Jun\|Sep\|Nov\) \([1-9]\|[12][0-9]\|30\)\>/p
        /^\(Jan\|Mar\|Jul\|Aug\|May\|Oct\|Dec\) \([1-9]\|[12][0-9]\|3[01]\)\>/p
        /^\(Feb\) \([1-9]\|[12][0-9]\)\>/p'

出力:

Apr 30 aaa
May 1 bbb
Feb 29 ccc

関連情報