我有一个文本文件,我想排除“access”一词,因为a后面是a、b或c,位于第二、第三或第四个位置。
# cat tt.txt
access
ample
taxing
我试过了,但它返回了所有3个单词。
# grep '[a-c][^a-c][^a-c][^a-c]' tt.txt
access
ample
taxing
更新1:
我使用了上面过于简化的例子。
# cat tt.txt
access
bccess
ample
taxing
tacking
not
# grep -Ev '[a-c].{0,2}[a-c]' tt.txt
ample
taxing
not
# grep -E '[a-c].{0,2}[^a-c]' tt.txt
access
bccess
ample
taxing
tacking
# Expected
ample
taxing
2条答案
按热度按时间fykwrbwg1#
我想排除单词
access
,因为a
后面是a
、b
或c
,位于第二、第三或第四个位置可以使用
awk
来完成:RegEx细分:
[a-c]
:匹配a
或b
或c
.{0,2}
:匹配0到2个任意字符[a-c]
:匹配a
或b
或c
或者在
gnu-grep
中使用环视:perl
中的相同解决方案:s71maibg2#
据我所知你的情况是
1.字符串必须包含
a
、b
或c
之一。1.在位置0-3中,任何abc都不能位于另一abc之前。
那我们为什么不这样写代码呢
这是一种编写代码来模拟菱形运算符
<>
的方法,由Perl oneliner中常用的-n
和-p
开关使用。我们使用DATA文件句柄来模拟一个文件。如果你想将其转换为oneliner,它看起来像我已经在你的示例单词表上测试了它,它似乎和预期的一样工作。