Мне дан массив строк из текстового файла. Они выглядят примерно так и всегда будут иметь такую структуру:
Full Tue Aug 27 10:59:43 2019 1
Incremental Tue Aug 27 11:16:41 2019 1
Incremental Tue Aug 27 11:25:28 2019 1
Incremental Tue Aug 27 13:37:29 2019 1
Основываясь на приведенном выше выводе, я не считаю, что эти 3 столбца квалифицируются как фиксированная ширина ... поскольку вы можете видеть, что формат даты может и, вероятно, изменится в зависимости от строки даты, а также первая строка содержит 4 символа в столбце одна строка один, в то время как тот же столбец содержит 11 в строке от 2 до конца ...
Как я могу разобрать дату из этих строк, поэтому мой список вместо этого:
Tue Aug 27 10:59:43 2019
Tue Aug 27 11:16:41 2019
Tue Aug 27 11:25:28 2019
Tue Aug 27 13:37:29 2019
я уверен grep
или sed
это, наверное, ответ, который мне нужен, просто я тоже мало знаю.
Ты можешь использовать sed
и регулярное выражение, чтобы вырезать дату этого.
Предполагая, что ваши данные хранятся в файле ввод.
sed -e 's/^\s\+\S\+\s\+\(.*\S\)\s\+\S\+$/\1/g' input
Tue Aug 27 10:59:43 2019
Tue Aug 27 11:16:41 2019
Tue Aug 27 11:25:28 2019
Tue Aug 27 13:37:29 2019
Первая часть s/^\s\+\S\+\s\+
соответствует строкам, которые начинаются с одного или нескольких пробельных символов, за которыми следует один или несколько непробельных символов, за которыми снова следует один или несколько пробельных символов. Например.:
' Full '
' Incremental '
Давайте посмотрим на последнюю часть сейчас \s\+\S\+$
. Это будет соответствовать одному или нескольким непробельным символам в конце строки, которым предшествует один или несколько пробельных символов. Например.:
' 1'
Средняя часть \(.*\S\)
группа соответствия, на которую может ссылаться \1
и называется обратной ссылкой. Это соответствует любому символу, начинающемуся после первого совпадения, до одного непробельного символа перед последним совпадением.
Как уже упоминалось, \1
является обратной ссылкой на среднюю часть и распечатывается.
Проверьте, может ли awk помочь.
$ cat abc.txt
Full Tue Aug 27 10:59:43 2019 1
Incremental Tue Aug 27 11:16:41 2019 1
Incremental Tue Aug 27 11:25:28 2019 1
Incremental Tue Aug 27 13:37:29 2019 1
$ cat abc.txt | awk '{print $2" "$3" "$4" "$5" "$6}'
Tue Aug 27 10:59:43 2019
Tue Aug 27 11:16:41 2019
Tue Aug 27 11:25:28 2019
Tue Aug 27 13:37:29 2019