У меня есть такая строка:
08:30:02.480507 IP 192.168.100.150.65119 > 192.168.100.151:53 59865 [1au] A? click.em.redbox.com. (48)
Мне нужно вырезать «.480507» из временной метки, чтобы строка выглядела так:
08:30:02 IP 192.168.100.150.65119 > 192.168.100.151.53: 59865 [1au] A? click.em.redbox.com. (48)
Я повозился с несколькими awk и cut операторами, но безрезультатно. Я хотел бы найти awk one liner, но sed может быть лучшим решением для этого. Я просто недостаточно знаю ни о том, ни о другом, когда дело доходит до резки таким образом.
ПРИМЕЧАНИЕ: Это пример, и часть временной метки, которую мне нужно вырезать, не будет одинаковой, поскольку мне нужно выполнить это действие в нескольких строках с разными временными метками.
решение1
Вероятно awk
, самый простой способ — выполнить замену регулярного выражения в первом поле, разделенном пробелами, заменив все от точки до конца поля:
awk '{sub(/\..*/,"",$1)}1' somefile
решение2
Я бы использовал awk
awk --posix '{ gsub(/\.[[:digit:]]{6}/, "", $1); print }' filename
Будет выбрано первое поле (разделенное пробелом) и выполнен поиск по символу ., за которым следуют 6 цифр, после чего поле будет очищено.
решение3
с ГНУsed
sed -r 's/^([^.]+)\.[0-9]+ /\1 /' filename
^([^.]+)
захватить начальную строку до первой точки\.[0-9]+
сопоставить символ точки, за которым следует более 1 цифры
и если количество символов соответствует указанному в примере,
sed -r 's/^(.{8}).{7} /\1 /' filename