Как искать строку из Все страницы человека

Во-первых, ваша непосредственная синтаксическая ошибка: "$ line" - это 6-символьная строка dollar, space, l, i, n, e. Чтобы взять значение переменной line, используйте "$line". Обратите внимание, что если значение -e или -E, echo воспримет его как опцию и ничего не выведет. Чтобы избежать этого, используйте printf %s. Кроме того, обычный read удаляет пробельные символы в начале и конце строки и рассматривает обратные слэши как управляющие символы; чтобы прочитать строку буквально, используйте IFS= read -r.

while IFS= read -r line; do
  printf %s "$line" | …
fi

Не используйте SHA-256 для хэширования паролей. Хотя это лучше, чем обычный текст, это все равно плохо. SHA-256 не является приемлемым способом хэширования паролей, поскольку хэши паролей должны быть солеными и медленными. Подробное объяснение см. в Как безопасно хэшировать пароли?. Вы можете использовать общедоступную утилиту mkpasswd для генерации приличных хэшей паролей; используйте SHA-256 или SHA-512 (несмотря на название, они нормальные, потому что на самом деле они не вычисляют хэш SHA2, а вычисляют итерированный хэш, что приемлемо медленно). Сгенерированный хэш включает случайную соль.

printf %s "$line" | mkpasswd -s -m SHA-512

В своем приложении вызовите системную функцию crypt для проверки этих хэшей. Если используемый вами язык программирования не дает доступа к стандартной библиотечной функции crypt, используйте библиотеку PBKDF2, bcrypt или scrypt, и используйте ее для генерации преобразованных хэшей (опять же, не используйте простой SHA-256 или SHA-512).

3
03.02.2019, 13:13
3 ответа

Когда вы запускаете команду man bash, вы открываете документацию в системном пейджере по умолчанию (, обычноless). Чтобы перейти к строкам, соответствующим определенному шаблону, вы можете ввести /<pattern>. Например, сразу после входа в справочную страницу введите:

/brace expansion

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

Также расширение файла .gzозначает, что файл сжат с помощью gzip. Вы не сможете прочитать этот файл напрямую.

4
27.01.2020, 21:17

Результат поиска -исходных файлов справочной страницы в системе -может быть передан обратно человеку в локальном режиме для чтения каждой страницы.

man -wK --regex 'Brace Expansion' | sort -u | xargs man -l -P cat | grep -inF 'Brace Expansion'

Регулярное выражение, используемое для поиска команды man, по умолчанию -нечувствительно к регистру. Список результатов поиска сортируется, и любые дубликаты удаляются. Затем он передается обратно человеку с помощью xargs. Используя пейджер cat, каждая обработанная справочная страница может быть распечатана на стандартный вывод. В этот момент данные представляют собой поток простого текста, с которым может работать grep.

Параметр -lпараметра manиспользуется для активации локального режима, в котором анализируется файл напрямую, а не системный MANPATH.

Опция -P catпараметра manустанавливает для пейджера значение cat. Это означает, что обработанная справочная страница будет отображаться с помощью cat.

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

1
27.01.2020, 21:17

Ответив на ваш первоначальный вопрос, следующая команда покажет вам все строки, содержащие «расширение фигурных скобок» на справочных страницах bash:

for page in $( man -k bash | awk '{print $1}' ); do
    zgrep -i -n  'brace expansion' $(man -w $page) /dev/null
done

Сначала вы получаете список справочных страниц, соответствующих «bash» в их описании, после чего вы перебираете полученный список и ищете подходящую строку «расширение фигурной скобки». zgrep (1 )автоматически распаковывает для вас файлы;)

0
27.01.2020, 21:17

Теги

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