GNU awk では、必要に応じて句読点で囲まれた数字で終わるレコードに入力を分割できます。
$ cat file
The quick brown fox {15} jumps over the lazy dog [20] in a certain way 4 that is definitely not appropriate for all of the viewers (0012).
$ gawk -v RS='[[:punct:]]*[[:digit:]]+[[:punct:]]*' 'RT{print $0 RT}' file
The quick brown fox {15}
jumps over the lazy dog [20]
in a certain way 4
that is definitely not appropriate for all of the viewers (0012).
あとは、レコードの必要な部分とレコード ターミネータを印刷するだけです。
$ gawk -v RS='[[:punct:]]*[[:digit:]]+[[:punct:]]*' 'RT{print gensub(/.*\y(the|a|an)\y/,"\\1","") gensub(/[[:punct:]]/,"","g",RT)}' file
The quick brown fox 15
the lazy dog 20
a certain way 4
the viewers 0012
あなたの例では、出力をすべて小文字に変換していることに気付きました。これを行うには、印刷の前にaを挿入するだけです (比較で大文字と小文字を区別しない$0=tolower($0)
という問題も解決します)。the|a|an
$ gawk -v RS='[[:punct:]]*[[:digit:]]+[[:punct:]]*' 'RT{$0=tolower($0); print gensub(/.*\y(the|a|an)\y/,"\\1","") gensub(/[[:punct:]]/,"","g",RT)}' file