Я хочу проверить, существуют ли все мои строки в текстовом файле. Они могут существовать в одной строке или на разных линиях. И частичные совпадения должны быть в порядке. Как это:
...
string1
...
string2
...
string3
...
string1 string2
...
string1 string2 string3
...
string3 string1 string2
...
string2 string3
... and so on
В приведенном выше примере мы могли бы иметь регулярные выражения вместо строк.
Например, следующий код проверяет, существует ли какая-либо из моих строк в файле:
if grep -EFq "string1|string2|string3" file; then
# there is at least one match
fi
Как проверить, существуют ли все они? Поскольку нас просто интересует наличие всех совпадений, мы должны прекратить чтение файла, как только все строки будут сопоставлены.
Возможно ли это сделать, не вызывая grep
несколько раз (что не будет масштабироваться, когда входной файл большой или если у нас есть большое количество строк, чтобы соответствовать) или использовать инструмент, такой как awk
или python
?
Кроме того, существует ли решение для строк, которое можно легко расширить для регулярных выражений?