Справка понимая sed команду

Может любой помогать мне понять то, что делает эта команда sed:

sed -n '/\(^[^:]*[eE]xception\):.*/s//\1/p' $LOGFILE | uniq -c

Делает этот поиск $LOGFILE для слов Exception или exception, рассчитайте, сколько строк имеет это слово и сообщает о количестве?

Я знаю это -n средства подавляют вывод, и uniq -c сообщает количество соответствий, но я не понимаю что '/\(^[^:]*[eE]xception\):.*/s//\1/p' делает.

Большое спасибо все.

3
задан 2 November 2017 в 19:04

1 ответ

Здесь существует несколько странных вещей. Во-первых, поскольку я просто изучил попытку ответить на Ваш вопрос (Спасибо!), 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: на той же строке, которая будет считаться как один.

3
ответ дан 1 December 2019 в 16:18

Другие вопросы по тегам:

Похожие вопросы: