Рейтинг:2

Фильтрация содержимого команды с помощью grep

флаг kn

Я пытаюсь отфильтровать вывод ssh-keyscan. Целью этого является фильтрация вывода, чтобы я мог использовать его в своем коде Python для идентификации хостов, подключенных к моей VPN. Обычно я бы использовал grep для фильтрации, один из моих grep фильтрует правильно, а другой нет.Первый grep работает, чтобы получить только идентификатор ed25519, но не уверен, почему я также получаю строки SSH-2.0.... Команда, которую я выполнил вместе с выводом, приведена ниже:

user@host# ssh-keyscan 10.xx.xx.xx | grep ed25519 | grep -v "#"
  # 10.xx.xx.xx:22 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.3
  # 10.xx.xx.xx:22 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.3
  # 10.xx.xx.xx:22 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.3
  # 10.xx.xx.xx:22 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.3
  # 10.xx.xx.xx:22 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.3
  10.xx.xx.xx ssh-ed25519 <ключ хоста>

Мне нужно, чтобы он печатал только строку ed25519. Я также пробовал фильтровать AWK, но все еще не получил нужного результата.

Любая идея, как отфильтровать только строку ed25519?

флаг hr
Строки `#`, скорее всего, будут выводиться в stderr, а не в stdout – попробуйте `ssh-keyscan 10.xx.xx.xx 2>&1 | grep ed25519 | grep -v "#"`
Tim R avatar
флаг kn
Вы были абсолютно правы в этом. Если вы хотите указать это как ответ, чтобы я мог отдать вам должное за это как за решение. Спасибо большое. Второй grep с этим тоже не понадобился, так как 2>&1 исправил его
флаг hr
Хорошо сделано - я также сделал несколько предложений по устранению grep(s)
Рейтинг:3
флаг hr

Строки, начинающиеся с # собираются на stderr (стандартная ошибка), а не на стандартный вывод (stdout). Получить grep -v чтобы их исключить, нужно перенаправить stderr на stdout:

ssh-keyscan 10.xx.xx.xx 2>&1 | grep ed25519 | grep -v "#"

Обратите внимание, что вы можете устранить первый grep, добавив фильтр типов к самой команде ssh-keyscan:

ssh-keyscan -t ed25519 10.xx.xx.xx 2>&1 | grep -v "#"

Если вы предпочитаете, вы можете перенаправить все ошибки на null вместо их фильтрации:

ssh-keyscan -t ed25519 10.xx.xx.xx 2>/dev/null
Рейтинг:0
флаг us

Хорошо, если вы знаете, что вывод будет включать «ssh-ed25519», вы должны найти это.

Или трубка к этому.

Или, если вы знаете, что это будет последняя строка вывода, передайте соответствующую команду «хвост».

Вы смотрели на команду sed?

флаг in
Добро пожаловать в Аскубунту. Когда вы предлагаете человеку сделать А или Б, чтобы решить проблему, обычно полезно включить примеры решения. К счастью, они уже существуют с принятым ответом.

Ответить или комментировать

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