Я использую openldap и обычно использую команду ldapsearch uid=<ldap> +
для проверки определенного атрибута. При запуске такой команды будет выведен полный вывод, например:
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
lastLoginTime: 20220829012233Z
passwordRetryCount: 0
retryCountResetTime: 20220826111616Z
passwordExpWarned: 0
passwordExpirationTime: 20220905092802Z
pwdUpdateTime: 20220707092802Z
modifyTimestamp: 20220707092802Z
Если, например, я хочу выполнить grep только для «retryCountResetTime», я пробую выполнить:
ldapsearch uid=<ldap> + | grep ^retryCountResetTime
Но вывод будет таким:
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
retryCountResetTime: 20220826111616Z
Я хотел бы удалить первые 3 строки (SASL), добавив tail -1, но это не работает.
Есть ли у вас предложения, как удалить строку 1-3?
решение1
Как@steeldriverупомянуто вКомментарии:
Возможно, первые три строки вообще не направляются в стандартный поток вывода, а направляются в стандартный поток ошибок?
Чтобы убедиться, что вы можете перенаправить канал STDERR на какой-то другойместо, например, нулевое устройство, добавив 2>/dev/null
в конец команды:
command -options arguments 2>/dev/null | grep 'something'
Если вы хотите обработать его, вы можете перенаправить его в STDOUT, добавив 2>&1
:
command -options arguments 2>&1 | grep 'something'
Обратите внимание, если вы хотите перенаправить STDERR вместе со STDOUT в файл, синтаксис будет следующим:
command -options arguments >/path/to/some.log 2>&1