というファイルがありますfile.txt
。このファイルには大文字と小文字の単語もあり、大文字と小文字、数字の単語もあります。出力に次の単語が含まれないように、このファイルをフィルタリングしたいと思います。両方大文字と小文字。たとえば、次のように入力しますfile.txt
。
Aaa
aBb
aB
Aa12
12aA
123
123Ab
AAA
aaa
ファイルには大文字と小文字を含む単語(Aaa、aBpなど)があり、その単語には大文字と小文字が含まれています。そして番号(例:123Ab)。また、単語には小文字(例:aaa)または大文字(例:AAA)のみが含まれます。 upperを含む単語だけを削除したいです。そして小文字(Aaa、aBpなど)なので、出力は次のようになります。
Aa12
12aA
123
123Ab
AAA
aaa
どんなアイデアがありますか?
ベストアンサー1
grep -Exv '[A-Za-z]*([A-Z][a-z]|[a-z][A-Z])[A-Za-z]*'
説明する
- アイデアは、まず、目的と反対の行、つまり大文字と小文字のみを含む行を一致させることです。これは
grep -Ex
、行全体に一致する拡張正規表現でgrepを使用します。その後、この-v
フラグは正規表現を無効にします。つまり、次を返します。欲しくない次の正規表現を一致させます。 - 中央部分は
([A-Z][a-z]|[a-z][A-Z])
大文字と小文字、その逆の文字と一致します。 - 外側の部分は、
[A-Za-z]*...[A-Za-z]*
行の残りの部分に大文字または小文字のみを含める必要があることを意味します。