Перенаправить вывод в файл из командной строки grep

9

Я бегу это:

cat /dev/urandom|hexdump| grep -i "ffff f" > random

и я ничего не получаю в файле random, он остается нулевой длины после прерывания команды.

Как сделать так, чтобы запись выводилась в файл?

Мне нужно записать результат в файл, который должен содержать выходные данные, например:

021bc40 7724 d4f5 59ec bcbb ffff fd26 ab3c 9b7c

03a9100 b3a5 8601 fa33 ffff f23c 4326 2e7f 0c8a

0449810 e459 d5af 4e11 ffff fc55 8660 9efb 3c9b

введите описание изображения здесь

Руслан Герасимов
источник

Ответы:

13

Используйте --line-bufferedопцию для grep(а также избавьтесь от ненужного cat):

hexdump /dev/urandom | grep --line-buffered -i "ffff f" > random

Таким образом, вывод не буферизуется, а каждая строка помещается randomсразу. Я также рекомендовал бы использовать teeв своей трубе, чтобы увидеть, сколько линий было произведено:

hexdump /dev/urandom | grep --line-buffered -i "ffff f" | tee random
Dubu
источник
3

Ваш файл пуст, потому что процесс прерывается до того, как файл будет записан на диск. Вот как работает перенаправление. В качестве обходного пути попробуйте это:

script -c 'cat /dev/urandom|hexdump|grep -i "ffff f"' -f random

Это в основном записывает весь вывод экрана в файл.

Jos
источник
Он задействовал еще одну команду, но доставил. Спасибо.
Руслан Герасимов
3

cat /dev/urandom|hexdumpили hexdump /dev/urandomнепрерывно пишет в стандартный вывод, и если вы нажмете Ctrl+ C, после этого ничего не будет выполнено. Но вы можете ограничить вывод с помощьюhead

hexdump /dev/urandom | head -n1000000 | grep "ffff f" > random  

это будет grepв первых 1000000 строках вывода и записывает результат в файл.

TuKsn
источник
Привлекла еще одну команду, но дала хороший результат. Спасибо.
Руслан Герасимов
1

Вам нужно будет записать вывод cat /dev/urandom | hexdumpв файл, прежде чем выполнять его в следующий раз. Сценарий ниже должен выполнить то, что вы пытаетесь:

cat /dev/urandom | hexdump |
  while IFS= read -r line; do
    printf '%s\n' "$line" >> random;
  done

IFS используется для разделения вывода на строки здесь.


(Источник)

Jobin
источник
grep "ffff f"пропустил
Руслан Герасимов