如何删除两个词组之间的时间戳?

时间:2019-04-11 11:51:25

标签: bash sed

需要删除唯一时间戳:“ Thu Apr 11 13:19:02 2019” “日期为2019年4月11日星期四13:19:02的日志文件已导入。” 仅使用 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 :(得分:0)

只需删除两个短语之间的任何内容即可。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

感谢帮助!

这是我的同事发现的另一种工作方法,该方法将“ [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."