Как удалить временную метку между двумя фразами?

#bash #sed

#bash #sed

Вопрос:

Необходимо удалить уникальную временную метку: «Thu Apr 11 13:19:02 2019» из фразы: «Файл журнала, датированный Thu Apr 11 13:19: 02 2019, был импортирован».используя ТОЛЬКО команду sed (обязательное условие).

Примечание: Пожалуйста, обратите внимание, что входной файл содержит две фразы!!!

https://unix.stackexchange.com/questions/88382/using-sed-to-delete-everything-between-two-words

 /^Log file dated/,/have been imported./{/^Log file dated/!{/have been imported./!d}}
  

К сожалению, это не работает, когда у нас есть две фразы в одном файле.

Ответ №1:

Просто удалите все, что находится между двумя фразами.

 s/Log file dated .* have been imported./Log file dated have been imported/
  

Ответ №2:

gnu sed, если данные в файле ‘s’

 sed -E 's/sw sw s[123][0-9]s([0-9][0-9]:?){3}s[0-9]{4}b//' s
  

perl,

 $s= "Log file dated Thu Apr 11 13:19:02 2019 have been imported."
$s =~ s/sw sw s[123][0-9]sdd:dd:ddsd{4}b//
print $s
  

просто посмотрите https://perldoc.perl.org/perlre.html

Ответ №3:

Спасибо за помощь!

Вот еще один рабочий метод, обнаруженный моим коллегой, который помещает текст «[TIMESTAMP]» вместо уникальной временной метки:

 s/[A-Za-z]{3}.[A-Za-z]{3}.[0-9]{1,}.[0-9]{1,}.[0-9]{1,}.[0-9]{1,}.[0-9]{1,}/[TIMESTAMP]/g
  

Тест в консоли bash:

 echo "Log file dated Thu Apr 11 13:19:02 2019 have been imported." | sed 's/[A-Za-z]{3}.[A-Za-z]{3}.[0-9]{1,}.[0-9]{1,}.[0-9]{1,}.[0-9]{1,}.[0-9]{1,}/[TIMESTAMP]/g'

Input text: "Log file dated Thu Apr 11 13:19:02 2019 have been imported."

Output text: "Log file dated [TIMESTAMP] have been imported."