Я хотел бы привязать файл, но только выходные строки, в которых есть определенная строка. Это возможно?
11
используйте grep. Он построен только для этой цели.
Чтобы найти строки из хвоста / var / log / syslog, в которых есть «cron», просто запустите:
tail -f /var/log/syslog | grep cron
И так как он принимает что-либо через stdin, вы можете использовать его и в выходных данных любой другой команды, выполняя конвейерную обработку так же, как описано выше (используя символ |).
grep
буферизуется, когда он используется неинтерактивно, например, когда он является частью более длинного конвейера. GNU grep 2.5.1 предлагает--line-buffered
возможность обойти эту проблему, когда исключение grep из конвейера не вариант. (Когда я говорю, что grep будет буферизовать, я имею в виду, что вы не увидите вывод, пока буфер не достигнет чего-то вроде 4k.)Надеюсь, это поможет.
источник
Вот пара других идей, которые, хотя и не так просты, могут предложить некоторую интересную дополнительную гибкость:
Во-первых, вы можете фильтровать с помощью awk вместо grep:
это работает точно так же, как в примере с использованием
grep
. Вы можете расширить это, используя силу awk, например:который будет печатать с шестого по последнее поле вывода (поля разделены пробелами)
Другая похожая идея заключается в использовании perl однострочного:
это работает так же, как
grep
. Может быть, вы хотите счетчик номера строки и только 6-е поле? Как насчет этого:Очевидно, что все эти виды вещей можно сделать и с помощью других инструментов, но я хотел бы проиллюстрировать, что здесь есть несколько забавных способов использовать более универсальные языки, такие как awk или perl.
источник
Стоит отметить еще один прием, если у вас есть файл CSV с заголовками, которые вы хотите опустить, например:
Не имеет значения , сколько времени на входе
tail
есть,+n -2
опускают первую строку.источник