Может любой помогать мне понять то, что делает эта команда sed:
sed -n '/\(^[^:]*[eE]xception\):.*/s//\1/p' $LOGFILE | uniq -c
Делает этот поиск $LOGFILE
для слов Exception
или exception
, рассчитайте, сколько строк имеет это слово и сообщает о количестве?
Я знаю это -n
средства подавляют вывод, и uniq -c
сообщает количество соответствий, но я не понимаю что '/\(^[^:]*[eE]xception\):.*/s//\1/p'
делает.
Большое спасибо все.
Здесь существует несколько странных вещей. Во-первых, поскольку я просто изучил попытку ответить на Ваш вопрос (Спасибо!), sed
имеет прохладный прием:
/foo/s//bar/
Это означает, "если эта строка соответствует foo
, затем замените то, что было подобрано foo
с bar
. Я действительно не понимаю точку его, честно говоря, Вы могли сделать то же самое с простым s/foo/bar/
, но там Вы идете.
Что касается regex:
^
: соответствуйте началу строки. [^:]*
: когда ^
внутренние квадратные скобки, который является отрицательным набором символов. Так, в то время как [abc]
средства a
или b
или c
, [^abc]
средства что-либо кроме a
, b
или c
. Так, [^:]*
будет соответствовать 0 или больше не -:
. [eE]xception
: это соответствует exception
или Exception
. :.*
: соответствия a :
и затем все остальное до конца строки. \( \)
) что означает, что то независимо от того, что было подобрано, получено и может быть упомянуто позже как \1
.Следующий бит является оператором замены, здесь s//\1/p
. Это означает, что замена вообще была подобрана прежде (включая неполученную часть, таким образом, целая строка) с тем, что было получено (\1
). Результат - это независимо от того, что было на строке до и включая слово expression
(или Expression
) будет распечатан. И, начиная с -n
подавляет вывод, p
в средствах конца "печатают эту строку, если замена была успешна.
Наконец, uniq -c
даст Вам количество строк, соответствующих шаблону, найденному в Вашем файле. обратите внимание, что это не количество раз слово exception
происходит в файле. Если у Вас есть больше чем один exception:
на той же строке, которая будет считаться как один.