1

Нужно отфильтровать и показать строки журнала, если строка содержит ровно 2 запятых и не содержит конкретной строки. Какую команду Linux мне нужно использовать, awk , grep , каково выражение?

Для второго условия я использую это:

awk '!/specificstring/' ./log/file/path

Две запятые проверить, я не знаю, как положить в. Обычно строка выглядит так:

arbitrary,arbitrary,arbitrary,arbitrary
arbitrary,arbitrary,arbitrary

Нужен второй тип линии.

Пробовал что-то вроде этого:

grep -P '[^,]+[,][^,]+[,][^,]+[,]"specificstring"[^,]+' ./log/file/path

Как исключить "конкретную строку"?

2 ответа2

2

Я предлагаю:

grep '^[^,]*,[^,]*,[^,]*$' file | grep -v 'specificstring'
0

Это можно сделать за один проход с помощью awk , объединив два условия:

awk '/^[^,]*,[^,]*,[^,]*$/ && !/specificstring/' ./log/file/path

То же самое может быть достигнуто в perl практически идентичной командой:

perl -lane 'print if /^[^,]*,[^,]*,[^,]*$/ && !/specificstring/' ./log/file/path

Чтобы ответить на вопрос в его более общем смысле, то есть отфильтровать строки, если найдено произвольное число вхождений строк:

perl -lane '@m = /,/g; print if scalar @m == 2 and !/specificstring/' ./log/file/path

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .