我有一个正则表达式的例子:
seq 20 | awk 'NR!~/^2$|^12$|^15$/'
相同,但使用链式表达式:
seq 20 | awk 'NR != "2" && NR != "12" && NR != "15"'
是否可以编写更短的字符串表达式?
seq 20 | awk 'NR != "2" | "12" | "15" '
谢谢你的解释。
我有一个正则表达式的例子:
seq 20 | awk 'NR!~/^2$|^12$|^15$/'
相同,但使用链式表达式:
seq 20 | awk 'NR != "2" && NR != "12" && NR != "15"'
是否可以编写更短的字符串表达式?
seq 20 | awk 'NR != "2" | "12" | "15" '
谢谢你的解释。
据我所知不是。正如您所暗示的那样,如果您想以这种方式执行相等测试(或不等式测试,在这种情况下),您将需要使用正则表达式。
如果要忽略多个值,请考虑在BEGIN
块中使用数组。!(NR in array)
当awk
遍历每一行时,这将使表达式更短(即表达式现在很简单:):
seq 20 | awk 'BEGIN { array[2]++; array[12]++; array[15]++ } !(NR in array)'
结果:
1
3
4
5
6
7
8
9
10
11
13
14
16
17
18
19
20
如果您尝试忽略的行有某种模式,请考虑在块中使用for
循环:BEGIN
seq 20 | awk 'BEGIN { for (i=1; i<=15; i++) array[i]++ } !(NR in array)'
16
17
18
19
20
第一个可能是最短的,如果你把锚放在一个组之外,它会更短()
:
seq 20 | awk 'NR !~ /^(2|12|15)$/'