Вложенная инструкция case в сценарии оболочки

Я не думаю, что сборка ядра из исходников улучшит работу вашего компьютера. Ядро уже оптимизировано, и его дальнейшая оптимизация потребует глубоких знаний в области разработки ядра.

Если вы можете предоставить дополнительную информацию о том, какую ОС вы хотели бы использовать на нем или с какими задачами он борется, мы, возможно, сможем предоставить полезные настройки.

0
08.06.2019, 20:48
2 ответа

Используйте

find. -type f ! -exec grep -q "$idontwant" {} ';' -exec grep -q "$iwant" {} ';' -print

или

find. -type f -exec grep -q "$iwant" {} ';' ! -exec grep -q "$idontwant" {} ';' -print
  • Термины (, иногда называемые «предикатами» )в findкоманды характеризуются как тесты (, например,-type fдействия (, например,  -printи -delete). Это может быть трудно понять из справочной страницы что -execявляется одновременно действием и проверкой . Таким образом, как
    find. -type f -mtime -30 -name '*.txt' -readable -size +5 test6 test7 test8
    последовательно сужает поиск до файлов, отвечающих всем критериям (удовлетворяют всем указанным тестам ), поэтому
    find. -exec cmd1 {} ';' -exec cmd2 {} ';' -exec cmd3 {} ';' …
    находит файлы, для которых все команды выполнены успешно.
  • Любой findтест может быть инвертирован (инвертирован ), если ему предшествует !. Итак, find. ! -type dнаходит обычные файлы, символические ссылки, именованные каналы, сокеты и файлы устройств — все, кроме каталогов.
  • Обратите внимание, что ! -exec grep …не эквивалентно -exec grep -v …. -exec grep -v …найдет файлы у которых хотя бы одна строка не совпадает. ! -exec grep …найдет файлы, в которых нет совпадающих строк .
  • Вариант -qдля grepофициально является синонимом --quiet, но это также означает быстрый . Он не выводит ничего (, за исключением, возможно, сообщений об ошибках, если применимо ). но также он закрывается, как только находит совпадение — он не читает каждый файл до конца, чтобы найти каждое совпадение. (Конечно, если файл не содержит совпадений, то grepдолжен прочитать его полностью, чтобы определить это.)
  • Итак,(TL;DR)команды находят файлы, для которых
    grep -q "$iwant"     file
    преуспевает и
    grep -q "$idontwant" file
    не получается (потому что мы предшествовали ему!).
  • Эти две команды функционально эквивалентны. но может иметь другую производительность (т. е. может потребоваться разное время для запуска ). Если только несколько файлов содержат строки поиска,
    find. -type f -exec grep -q "$iwant" {} ';' ! -exec grep -q "$idontwant" {} ';' –print
    будет быстрее, потому что grep "$iwant"удалит большинство файлов. Если многие файлы содержат обе строки, то
    find. -type f ! -exec grep -q "$idontwant" {} ';' -exec grep -q "$iwant" {} ';' –print
    будет быстрее, потому что ! grep "$idontwant"удалит большинство файлов.
2
28.01.2020, 02:30

С помощью GNU grepмы можем выполнить извлечение имени файла с разумным выбором параметров regex и grep:

$ grep -lzPsr '(?s:(?=.*blue)(?!.*red))'.

Мы используем grep в режиме slurp (-z ), в котором весь файл обрабатывается как одна большая строка.

В -l будут перечислены имена файлов (s ), соответствующие регулярному выражению.

-r будет выполняться рекурсивно для всех файлов в текущем каталоге и ниже.

-отключает grep, чтобы не выдавать никаких предупреждений.

Регулярное выражение будет искать наличие синего и отсутствие красного в файле, чтобы сказать «да».

-P вызывает механизм регулярных выражений Perl в grep, чтобы мы могли воспользоваться преимуществами регулярных выражений pcre.

0
28.01.2020, 02:30

Теги

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