年の範囲が 1965-1996 である grep または egrep を確認してください。

年の範囲が 1965-1996 である grep または egrep を確認してください。

特定の日付に動作するgrepがありますが、私の脳にそれを最大限に活用させることはできません。

grep 19[6-9][5-6]$ filename

一部は正確にキャプチャしましたが、1965年から1996年のすべての年をキャプチャしたいと思います。

これは現在の解決策ですが、実際には1行を探していますが、これまでに得たものは次のとおりです。

grep 196[5-9]$ filename
grep 197[0-9]$ filename
grep 198[0-9]$ filename
grep 199[0-6]$ filename

可能であれば、より良い短いものをお探しですか?

答え1

日付範囲と正規表現は一緒にうまく機能しません。 grepの$を正しく解釈すると、日付は行の最後のフィールドです。

この試み:

awk '$NF >= 1965 && $NF <= 1996' filename

grepを使用する必要がある場合は、より複雑になります。

grep -E '196[5-9]|19[78][0-9]|199[0-6]$' filename

答え2

次のように因数分解がegrep許可されることに注意してください。19

grep -E '19(6[5-9]|[78][0-9]|9[0-6])$' filename

これがより明確であると見ることができます。

答え3

seqより読みやすいこれを使用することもできます。

grep -E "$(seq -s "|" 1965 1996)" filename

-s, --separator=文字列

答え4

標準grep構文を使用して、1965〜1996の範囲の部分文字列番号で終わる行を抽出します。似たような問題のユーザーが試したこと):

grep -e '196[5-9]$' \
     -e '197[0-9]$' \
     -e '198[0-9]$' \
     -e '199[0-6]$'

これにより、関心のある数字で終わる行が抽出されます。式は通常引用する必要があります。

231974たとえば、行の末尾に(with)が一致しないようにするには、パターンの各数字の先頭に挿入できます。1974\<

grep -e '\<196[5-9]$' \
     -e '\<197[0-9]$' \
     -e '\<198[0-9]$' \
     -e '\<199[0-6]$'

これにより、数字が他の長い単語の部分文字列ではなく単語になります。

関連情報