在macOS上,我有一个.txt文件,其中包含多行文本。我只想过滤日期,并将它们按出现顺序逐行保存在新的文本文件中。
但是,我对所有日期都不感兴趣,仅对看起来像02/03/2019的那些完整日期以及少于13天的日期感兴趣。 e。 01 ... 12。
然后,我想删除日期和月份的数字相同的日期,例如01/01/2019和02/02/2019等。
如何使用awk
或bash中的类似软件来实现这一目标?
答案 0 :(得分:2)
如果选择perl:
perl -ne 'print if m:(\d\d)/(\d\d)/(\d\d\d\d): && $1 < 13 && $1 != $2' dates.txt >newdates.txt
这假定为这种格式/dd/mm/yyyy
请注意,我使用m: :
表示法而不是通常的/ /
来进行正则表达式匹配。因此,我不需要在日期中转义/
斜杠。
答案 1 :(得分:1)
以下命令将删除格式为✱ aa/bb/cccc
的所有日期,其中aa
= bb
<13。原始文件将被复制到{{ 1}}作为备份,带有删除日期的新文本将覆盖旧文件。
yourFile.txt.bak
如果您想插入一些内容而不只是删除日期,则可以通过在两个sed -E -i.bak 's:\b(0[0-9]|1[0-2])/\1/[0-9]{4}\b::g' yourFile.txt
之间写入替换内容来实现。例如,::
将每个匹配的日期替换为文本sed … 's:…:deleted date:/g' …
。
✱请注意,日期格式是deleted date
还是dd/mm/yyyy
对您的标准来说都没有关系,因为您只对mm/dd/yyyy
和{{1 }}相等。
如果您不想删除,而只提取注释中提到的特定日期,则可以使用以下命令。
dd
这将以 mm
(!)格式提取所有日期,其中grep -Eo '\b([0-9]{2}/){2}[0-9]{4}\b' yourFile.txt | awk -F/ '$1<13 && $1!=$2'
≠dd/mm/yyyy
<13。日期按出现在stdin上的顺序打印。如果要将它们保存到文件中,请在命令末尾附加mm
。