Я хотел бы сохранить файл, но только строки вывода, в которых есть определенная строка. Это возможно?
используйте grep. Он построен именно для этой цели.
Чтобы найти строки из хвоста / var / log / syslog, в которых есть cron, просто выполните:
tail -f /var/log/syslog | grep cron
А поскольку он принимает все, что угодно, поверх стандартного ввода, вы можете использовать его и для вывода любой другой команды, установив конвейер таким же образом, как указано выше (с использованием символа |).
tail -f /var/log/messages | grep "myfilterword"
Надеюсь, это поможет.
Вот еще пара идей, которые не так просты, но могут предложить некоторую интересную дополнительную гибкость:
Во-первых, вы можете фильтровать с помощью awk вместо grep:
tail -f /var/log/messages | awk '/myfilterword/'
это работает точно так же, как в примере с использованием grep
. Вы можете расширить это, используя возможности awk, например:
tail -f /var/log/messages | \
awk '/myfilterword/ { for (i=6; i<=NF; i++) printf("%s ", $i); printf("\n")}'
который будет печатать с 6-го по последнее поле вывода (поля разделены пробелами)
Еще одна похожая идея - использовать однострочник perl:
tail -f /var/log/messages | perl -ne "/myfilterword/ and print"
это работает точно так же grep
. Может быть, вам нужен счетчик номеров строк и только 6-е поле? Как насчет этого:
tail -f /var/log/messages | \
perl -lane "/myfilterword/ and printf \"%6d %s\n\",++\$a,\$F[6]"
Очевидно, что все подобные вещи можно делать и с другими инструментами, но я хотел проиллюстрировать, что есть несколько интересных способов использовать здесь более универсальные языки, такие как awk или perl.
Еще одна хитрость, которую стоит отметить, если у вас есть CSV-файл с заголовками, которые вы хотите опустить, например:
% cat data.txt
fruit dessert calories
Apple Pie 770
Banana Pudding 625
Cherry Cobbler 990
% tail -n +2 data.txt
Apple Pie 770
Banana Pudding 625
Cherry Cobbler 990
Неважно, как долго вводится tail
это +n -2
будет опускать первую строку.