正規表現に関する簡単な(簡単な)質問があります。順序に関係なく、すべてのトークンセットに一致する正規表現を考えたいと思います。
たとえば、米国の州名を含むファイルがあります。
Abbreviation:State name:Capital:Became a state
AL:Alabama:Montgomery:December 14, 1819
AK:Alaska:Juneau:January 3, 1959
AZ:Arizona:Phoenix:February 14, 1912
...
WI:Wisconsin:Madison:May 29, 1848
WY:Wyoming:Cheyenne:July 10, 1890
名前に「A」、「R」、「N」という文字があるすべての州(大文字と小文字を区別しない)を探したいとしましょう。
私は一つ作ることができます
$ cut -d: -f2 states.txt | tail -n +2 | grep -i a | grep -i r | grep -i n
もちろん、そのようなことが起こりました。
Arizona
Arkansas
California
Maryland
Nebraska
New Hampshire
North Carolina
North Dakota
Rhode Island
South Carolina
Virginia
West Virginia
3つの文字がすべて任意の順序で表示される場合は、単一の正規表現を使用して一致させる方法はありますか?
ベストアンサー1
以下を使用する必要がありますawk
。
$ awk '/a|A/ && /R|r/ && /N|n/' file
Arizona
Arkansas
California
Maryland
Nebraska
New Hampshire
North Carolina
North Dakota
Rhode Island
South Carolina
Virginia
West Virginia
渡すとgawk
使えます大文字と小文字を無視:
gawk '/a/ && /r/ && /n/' IGNORECASE=1 file