特定の日付に動作する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]$'
これにより、数字が他の長い単語の部分文字列ではなく単語になります。