Мне иногда нужно проверить некоторые журналы, и я делаю это с помощью этой команды:
egrep -o "success|error|fail" <filename> | sort | uniq -c
Пример ввода:
test error on line 10
test connect success
test insert success
test started at 00:00
test delete fail
Пример вывода:
1 error
1 fail
2 success
Я хотел бы знать, если кто-нибудь знает способ сделать это с помощью более короткой команды?
Прежде чем спросить, почему я хотел бы сделать это с другой командой ... Никаких особых причин, мне просто любопытно :)
command-line
grep
alternative
Волчок
источник
источник
Не намного короче, но поскольку вам не нужно регулярное выражение, есть
fgrep
(grep -F
).другой способ написать то же самое в bash:
источник
Вы можете написать простой скрипт bash и затем вызвать скрипт, например:
и сохранить его как (например)
myscript.sh
. Затем сделайте,chmod +x myscript.sh
и вы можете назвать это какmyscript.sh <filename>
.источник
Ваша команда, хотя и короткая и приятная, является довольно окольным способом подсчета вхождений термина. Я бы, вероятно, использовал тупой, прямой подход и использовал бы флаг -c grep (который делает именно это) внутри цикла оболочки:
Не такой короткий, не такой захватывающий, потенциально более быстрый для больших лог-файлов (нет
sort
). Я бы сказал, что это мытье.источник
Это может быть глупый ответ, но я думаю, что в этом случае
sort
он совершенно бесполезен; может быть, вы можете опустить это. Тем не менее, здесь мы используем три разные команды для трех разных действий.Мы можем сократить его, если некоторые из них могут быть достигнуты
grep
, но я не вижу, какой ... :)источник
2 success 1 fail 1 success
.