我有大量文件包含我想删除的所有大写单词,但也有一小部分我想保留在文件中的单词,我该如何在正则表达式中做到这一点。
例如:
文件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
和除外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
或者对于、、 为空或至少包含一个除大写字母和下划线之外的字符的grep
行:TEST
TESTING
grep -E '(^(TEST|TESTING)?$)|[^[:upper:]_]'