Ваша команда не дает вывода, потому что второй grep
команда ничего не соответствует:
grep -Eo "[0-9]{12}"
Это ищет ровно 12 последовательных чисел, но у вас никогда не будет 12 последовательных чисел, потому что ваш первый grep
выводит только дату и время, так что остальная часть строки уже потеряна.
Если ваш ввод действительно состоит из двух строк, которые вы показываете, то все, что вам нужно, это напечатать 1-е, 2-е и 11-е поля в строках, которые имеют как минимум 11 полей:
$ awk Файл NF>10{print $1,$2,$11}
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' файл
2021-06-12 20:59:41 213550040214
-Е
включает расширенные регулярные выражения, которые упрощают здесь синтаксис и -н
рассказывает сед
ничего не печатать по умолчанию. Тогда оператор подстановки (с/старый/новый/
) попытается сопоставить форматы, которые вы ищете, и захватить их (скобки «захватят» шаблоны), чтобы мы могли заменить все только двумя совпавшими разделами (\1 \2
).
Обратите внимание, что это найдет прошлой растянуть из 12 чисел, поэтому если у вас будет более одного такого набора, это не удастся. Мы могли бы дать вам более конкретное решение, но вы должны были бы предоставить нам более подробную информацию о вашем файле, что является переменным и что никогда не меняется.