Выход трубопровода sed / grep не работает

Если я запустил приведенные ниже команды, то только out1 имеет выход, out2 и out3 пусты.

 # this is just to generate a self-signed certificate openssl genrsa -out /tmp/ssl.key 2048 openssl req -sha256 -new -key /tmp/ssl.key -out /tmp/ssl.csr -subj /CN=localhost openssl x509 -req -days 365 -in /tmp/ssl.csr -signkey /tmp/ssl.key -out /tmp/ssl.crt # works openssl s_server -cert /tmp/ssl.crt -key /tmp/ssl.key -accept 444 > out1 # does not work, but if I run without '> out2' it works openssl s_server -cert /tmp/ssl.crt -key /tmp/ssl.key -accept 446 | sed "s/ACCEPT/ACCEPT445/g" > out2 # does not work, but if I run without '> out3' it works openssl s_server -cert /tmp/ssl.crt -key /tmp/ssl.key -accept 447 | grep ACCEPT > out3 

Почему перенаправление stdout из sed или grep не выполняется, но работает без перенаправления?

2 Solutions collect form web for “Выход трубопровода sed / grep не работает”

Попробуйте sed -u ( -l в системах BSD / Mac OSX) и grep --line-buffered .

Кажется, вы ожидаете, что out2 и out3 будут записаны в реальном времени, но sed и grep в трубке ждут EOF. И здесь ничего не получается.

Убейте openssl с другой консоли и проверьте, есть ли у вас правильные результаты в out2 и out3 .

  • Как вставить команду оболочки в выражение sed?
  • sed заменить на backspace
  • sed -e '$! d' работает не так, как ожидалось?
  • Заменить значение в одинарных кавычках в строке, содержащей определенное слово, используя команду sed
  • sed regex issue
  • Удалить узел XML, содержащий определенный элемент
  • Извлечение справочного сообщения из самого скрипта
  • Заменить символ только в том случае, если ему предшествует цифра
  • Как сопоставить и заменить значение атрибута внутри тега
  • Превращение процентов в десятичные числа?
  • Печать текста между двумя шаблонами, не содержащими конкретного слова
  • Linux и Unix - лучшая ОС в мире.