Я хотел бы иметь возможность анализировать дату и время из файла журнала. В настоящее время они имеют следующий формат:
«02 / июн / 2009: 14: 38: 50», но я хотел бы разделить их по разным столбцам, используя что-то доступное из командной строки Linux, чтобы результат выглядел следующим образом:
«02 / июн / 2009» «14:38:50»
Не мог бы кто-нибудь пролить свет на то, как это можно сделать?
Отношении
5 ответов
Ответ Криса лучше всего, если нет строк с другими форматами. Если вам нужно воздействовать только на строки с этим конкретным форматом, вот что:
cat log | sed -e 's/"\([^:]*\):\([^"]*\)"/"\1" "\2"/'
Если это все, что есть в каждой строке, возможно:
cat file.txt | sed -e 's/:/" "/'
Функция sub () awk возвращает 1, если подстановка прошла успешно, поэтому:
cat file.txt | awk 'sub(/:/,"\" \"")'
GNU awk может использовать функцию gensub (), так что это образец обратной ссылки ниже.
cat file.txt | gawk '$0=gensub(/("[^:]*):([^"]*")/,"\\1\" \"\\2",1)'
Битерскрипт для поиска регулярного выражения "&: &: &: &" и разделения до и после первого двоеточия. (& означает любое количество любых символов).
var str log
cat "logfile" > $log
while ( { sen -r "^&:&:&:&^" $log } > 0 )
do
var str datetime, date, time
stex -r "^&:&:&:&^" $log > $datetime
stex -p "]^:^" $datetime > $date # String before the first : is date.
stex -p "^:^[" $datetime > $time # String after the first : is time.
echo $date "\t" $time
done
Чтобы попробовать, вы можете скачать битерскриптинг. Google или инструкции по установке находятся на http://www.biterscripting.com.
Чистый Баш:
while read line ; do echo ${line/:/\" \"}; done < logfile
Похожие вопросы
Новые вопросы
regex
Регулярные выражения предоставляют декларативный язык для сопоставления шаблонов в строках. Они обычно используются для проверки, синтаксического анализа и преобразования строк. Поскольку регулярные выражения не полностью стандартизированы, все вопросы с этим тегом должны также включать тег, определяющий применимый язык программирования или инструмент.