Я скопировал следующий журнал из проводника журнала grafana.
2021-06-12 21:59:41
2021-06-12 20:59:41.118 INFO 1 --- [edElastic-14048] c.o.i.i.s.i.UserManagementServiceImpl : BUNDLE_PURCHASE_FAILED || 213550040214 | Failed to Do Simple Bundle Purchase For Transaction 5001235315807102834, Error JSON decoding error: Cannot deserialize value of type
мой ожидаемый результат:
2021-06-12 21:59:41 213550040214
Я использую команду ниже, чтобы получить ожидаемый результат:
grep -Eo "[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}" bfailed.txt | grep -Eo "[0-9]{12}" | sed '/[a-zA-Z]/d' > b.txt
Но эта команда не дает никаких результатов. Как я могу получить ожидаемый результат?
Ваша команда не выводит результат, потому что вторая команда grep
ничего не соответствует:
grep -Eo "[0-9]{12}"
Это ищет ровно 12 последовательных чисел, но у вас никогда не бывает 12 последовательных чисел, потому что ваш первый grep
выводит только дату и время, поэтому остальная часть строки уже потеряна.
Если на самом деле введены только две строки, которые вы показываете, то все, что вам нужно, - это напечатать 1-е, 2-е и 11-е поле в строках, которые имеют как минимум 11 полей:
$ awk 'NF>10{print $1,$2,$11}' file
2021-06-12 20:59:41.118 213550040214
Если у вас больше строк и вам действительно нужно соответствовать определенному формату даты и времени, вы можете попробовать следующее:
$ sed -En 's/([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}).*([0-9]{12}) .*/\1 \2/p' file
2021-06-12 20:59:41 213550040214
-E
включает расширенные регулярные выражения, которые упрощают здесь синтаксис, а -n
сообщает sed
по умолчанию ничего не печатать. Затем оператор подстановки ( s / old / new /
) попытается сопоставить форматы, которые вы ищете, и захватит их (скобки «захватывают» шаблоны), чтобы мы могли заменить все только двумя сопоставленными разделы ( \ 1 \ 2
).
Обратите внимание, что это найдет последний отрезок из 12 чисел, поэтому он не будет работать, если у вас будет более одного такого набора. Мы могли бы предложить вам более конкретное решение, но вы должны будете предоставить нам более подробную информацию о вашем файле, о том, что является переменным, а что никогда не меняется.