我有以下示例行:
a_a
b_c
我该如何(使用
grep
/egrep
)匹配第一个字母不等于最后一个字母的行呢?我尝试了以下代码,但似乎并不能正确工作。egrep ([ab])_[^\1]
对于我的用例,使用egrep -v
或反向正则表达式(匹配除了首字母等于末尾字母之外的所有内容)都是不可行的。
使用分组匹配。
在此,您可以创建一个包含第一个字符的分组,然后在末尾放置分组(\1
)。
egrep '^(.).*\1$'
相反:
pcregrep '^(.).*((?!\1).)+$'
也许您正在寻找这个:
\b([a-z])\w+(?!(\1))([a-z])\b
它适用于:
a_a 和 b_c
(已测试:The Regulator 2.0.3)
您可以根据需要调整此正则表达式以进一步满足您的需求。
使用以输入结尾为锚点的负向后查找。一个通用的“第一个字符不是最后一个字符”的正则表达式是:
^(.).*(?<!\1)$
为了仅匹配您的输入类型:
^(.)_.(?<!\1)$
perl -ne 'print if /^(.).*(?<!\1)$/' file
时,它会给我返回 Variable length lookbehind not implemented
。 - Sundeep
(?![ab])_
? - Tushar