削除したい大文字の単語をすべて含むファイルがたくさんありますが、ファイルに保存したい小さな単語のセットもあります。正規表現でこれを行うにはどうすればよいですか?
たとえば、
ファイル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つ以上含まれる行の場合grep
:TEST
TESTING
grep -E '(^(TEST|TESTING)?$)|[^[:upper:]_]'