正規表現は、順序に関係なくすべてのトークンと一致します。

正規表現は、順序に関係なくすべてのトークンと一致します。

正規表現に関する簡単な(簡単な)質問があります。順序に関係なく、すべてのトークンセットに一致する正規表現を考えたいと思います。

たとえば、米国の州名を含むファイルがあります。

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

おすすめ記事