【发布时间】:2012-09-24 23:13:16
【问题描述】:
我不确定 && 运算符是否适用于正则表达式。我要做的是匹配一行,使其以数字开头并具有字母“a”并且下一行以数字开头并具有字母“b”和下一行...字母“c” .此 abc 序列将用作开始读取文件的唯一标识符。
这就是我在 awk 中的目标。
/(^[0-9]+ .*a)&&\n(^[0-9]+ .*b)&&\n(^[0-9]+ .*c) {
print $0
}
这些正则表达式中只有一个像 (^[0-9]+ .*a) 一样工作,但我不知道如何将它们串在一起,下一行就是这样。
我的文件会是这样的:
JUNK UP HERE NOT STARTING WITH NUMBER
1 a 0.110 0.069
2 a 0.062 0.088
3 a 0.062 0.121
4 b 0.062 0.121
5 c 0.032 0.100
6 d 0.032 0.100
7 e 0.032 0.100
而我想要的是:
3 a 0.062 0.121
4 b 0.062 0.121
5 c 0.032 0.100
6 d 0.032 0.100
7 e 0.032 0.100
【问题讨论】:
-
对于您的情况,因为您的“子句”(您想要 AND 在一起的三个条件)不重叠,所以您根本不需要任何运算符,只需“吃掉”其余的@m.buettner 建议的方式。如果您的条件确实重叠,例如如果您想检查一行是否包含一个符号和一个数字(但您不知道顺序),那么您将使用所谓的“前瞻断言”来实现这种匹配。
-
只有我知道的前瞻断言是 python 中的 next() 函数。我在下面的答案中尝试过。
-
我不熟悉 Python,但我说的是前瞻和后瞻结构,我知道 Python 支持:regular-expressions.info/lookaround.html。