Как убрать метку времени между двумя фразами? - PullRequest
0 голосов
/ 11 апреля 2019

Необходимо удалить уникальную метку времени: "Четверг 11 апреля 13:19:02 2019" из фразы: "Файл журнала от 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}}

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

Ответы [ 3 ]

0 голосов
/ 11 апреля 2019

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

sed -E 's/\s\w+\s\w+\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/\s\w+\s\w+\s[123][0-9]\s\d\d:\d\d:\d\d\s\d{4}\b//
print $s

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

0 голосов
/ 11 апреля 2019

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

Вот еще один метод работы, обнаруженный моим коллегой, который помещает текст «[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."
0 голосов
/ 11 апреля 2019

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

s/Log file dated .* have been imported./Log file dated have been imported/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...