В зависимости от того, насколько сложны RE, вы можете использовать такой язык, как Python (непроверенный):
#! /usr/bin/env python3
import re, sys
res = ["re1", "re2",... ] # or read from a file
recs = [re.compile(r) for r in res]
matches = {}
for line in sys.stdin:
for r in recs:
if r.match(line):
matches[r] += 1
for r in matches:
if matches[r] == 0:
print(r.pattern)
Конечно, если регулярные выражения содержат строки, которые не могут быть восприняты буквально более продвинутой поддержкой регулярных выражений Python, это не сработает. Вероятно, вы могли бы избавиться от большого количества работы, передав вывод grep
этому (, так как тогда мы удаляем строки, в которых нет совпадений с регулярным выражением ).
Используйте переменную (lin
), которая содержит номер строки из строки 6. Если lin
кратно 9, выведите строку с номером строки.
awk '{lin=NR-6; if (!(lin %9)) print}' file1 > file2
В GNU sed
вы можете использовать операторпервый ~шаг :
sed -n '6~9p' file1 > file2