正規表現で特定の単語以外の単語をすべて大文字に一致させる方法

正規表現で特定の単語以外の単語をすべて大文字に一致させる方法

削除したい大文字の単語をすべて含むファイルがたくさんありますが、ファイルに保存したい小さな単語のセットもあります。正規表現でこれを行うにはどうすればよいですか?

たとえば、

ファイル1.txt:

hello_world
HELLO
WORLD
HI
hi
test_string
TEST
TESTING

このファイルのすべての大文字の単語を削除したいと思います。ただし、TESTこの方法でTESTING 出力すると次のようになります。

hello_world
hi
test_string
TEST
TESTING

ベストアンサー1

これにより、perl次のことができます。

perl -C -pe 's/\b(?:(TEST|TESTING)|[\p{Lu}_]+)\b/$1/g' your-file

TESTとを除いて、単語以外の文字(単語の文字は数字または下線付き)で区切られた1つ以上の大文字または下線のシーケンスは削除されますTESTING

そのような単語で構成される行を削除するには、次のようにします。

sed -E '/^(TEST|TESTING)$/b
        /^[[:upper:]_]+$/d' your-file

または

perl -C -lne 'print if $_ eq "TEST" ||
                       $_ eq "TESTING" ||
                       ! /^[\p{Lu}_]+$/' your-file

または:

awk '$0 == "TEST" || $0 == "TESTING" || ! /^[[:upper:]_]+$/' your-file

または、、が空の場合、または大文字と下線以外の文字が1つ以上含まれる行の場合grepTESTTESTING

grep -E '(^(TEST|TESTING)?$)|[^[:upper:]_]'

おすすめ記事