按照一定的标准匹配2个正则表达式?

时间:2012-03-29 14:20:14

标签: regex awk

我有一个格式为。

的大文本文件
english word: spanish equivalent words here;
english word: spanish equivalent words here;
for about 1000 lines

我需要做的是找到英语单词与西班牙语单词相同的单词,但最后一个字母'e'已更改为'o' 因此,所有以'e'结尾的英语单词,他们的西班牙语等效单词都是完全相同的拼写,除了最后一个字母是'o'而不是'e'。 我希望这是有道理的:

例如,我会组成一个单词

thiswordE: spanishwordO; would be returned whilst
thisword: spanishwordO;  would not
thisword: spanishword; would also not be returned

我试图将其与:

隔离开来
awk '/[^e:]*e:/ && /[^o;]*o;/ {print}' a.txt 

awk '/.*(e:|o;)/ {print}' a.txt

两者都没有对我有用..有人可以帮帮我吗? 还是指出我正确的方向?

另外说我用awk找到一个特定的表达式,我怎么设置一个等于这个正则表达式的变量?

例如,如果我有上述文件的正则表达式

awk '/...:/'   (so the last 3 letters before the :)

并且想要设置一个等于该正则表达式结果的变量,我该怎么做?

如果你给我一个直截了当的答案,你能解释它是如何运作的吗?

1 个答案:

答案 0 :(得分:2)

我觉得这样的事情应该有用(除非有些东西我不知道对于awk有什么特别之处):

([a-zA-Z]+)[eE]:\s*\1[oO];.*

它允许所有情况(没有开关),因此只需删除不需要它们的大写字母或不希望允许的大写字母。最后.*允许分号后和换行前的任何内容。 \1是对括号中包含的第一个表达式匹配的内容的反向引用,\s是任何空格(包括换行符)

请问您是否需要更多解释。

编辑:这是一般的正则表达式,并且与awk不兼容,因为awk不支持反向引用 - 请参阅follow-up question by the OP以了解它在sed中的使用,而不是awk。