Как удалить часть строки из файла HTML

Последний grepв конвейере читал бы из предыдущего grep(, если бы не использовалась опция -r, см. далее ), поэтому он не знал бы, из какого файла откуда пришли данные, что, в свою очередь, означает, что он не может сообщить путь к файлу.

Вместо этого рассмотрите возможность использования findвот так:

find. -type f \
    -exec grep -q 2019 {} \; \
    -exec grep -q DSL {} \; \
    ! -exec grep -qi FAILED {} \; \
    -print

Это позволит рекурсивно )взять каждый обычный файл из текущего каталога и любого подкаталога (и проверить, содержит ли он строки 2019, DSLFAILED(без учета регистра ). Он напечатает пути к файлам, которые содержат первые две строки, но не содержат третью.

Если файл не содержит 2019, два других теста не будут выполняться, а если он не содержит DSL, последний тест не будет выполнен и т. д.

Обратите внимание, что вместо grep -v -qi FAILEDя использую отрицание grep -qi FAILEDв качестве третьего теста. Меня не интересует, содержит ли файл строки, не содержащие FAILED, меня интересует, содержит ли файл FAILED, и в этом случае я хотел бы пропустить этот файл.

Связанные:


Проблема с конвейером,

grep -r 2019 | grep -riv FAILED | grep -rl DSL

заключается в том, что последний grepбудет рекурсивно просматривать все файлы в текущем каталоге и ниже и игнорировать ввод с предыдущих этапов конвейера. Два первоначальных вызова grepмогут произвести некоторые данные, но они не смогут передать их через конвейер и в конечном итоге будут уничтожены, когда будет выполнен последний grep.

Также, как я уже отмечал выше, средний grepне будет находить файлы, не содержащие FAILED, он будет находить файлы, содержащие строки с вещами, отличными от FAILED. Между прочим, он также игнорирует входные данные предыдущего grep.

1
09.08.2021, 14:12
0 ответов

Теги

Похожие вопросы