我有一个格式为。
的大文本文件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 :)
并且想要设置一个等于该正则表达式结果的变量,我该怎么做?
如果你给我一个直截了当的答案,你能解释它是如何运作的吗?
答案 0 :(得分:2)
我觉得这样的事情应该有用(除非有些东西我不知道对于awk有什么特别之处):
([a-zA-Z]+)[eE]:\s*\1[oO];.*
它允许所有情况(没有开关),因此只需删除不需要它们的大写字母或不希望允许的大写字母。最后.*
允许分号后和换行前的任何内容。 \1
是对括号中包含的第一个表达式匹配的内容的反向引用,\s
是任何空格(包括换行符)
请问您是否需要更多解释。
编辑:这是一般的正则表达式,并且与awk不兼容,因为awk不支持反向引用 - 请参阅follow-up question by the OP以了解它在sed中的使用,而不是awk。