如何在Shell中删除字符串中的日期?

时间:2016-11-18 08:49:04

标签: string shell sed filtering

我在.txt文件中得到了这样的字符串列表

asdafdgdhjhgk.de/dsafdfdfgfdggfgg - Abgelaufen seit 26.11.2076 14:08 (seit 12345 Tagen)

现在我想从字符串中删除日期:26.11.2076

这一切都必须在Shell脚本中发生,所以我通过cutsed会是一个好主意,但我没有在互联网上找到答案。

3 个答案:

答案 0 :(得分:2)

您可以使用GNU grep -E regEx使用-E, --extended-regexp标记扩展$ grep -Eo "[[:digit:]]{2}.[[:digit:]]{2}.[[:digit:]]{4}" <<< "asdafdgdhjhgk.de/dsafdfdfgfdggfgg - Abgelaufen seit 26.11.2076 14:08 (seit 12345 Tagen)" 26.11.2076 支持。

$ grep -Eo "[[:digit:]]{2}.[[:digit:]]{2}.[[:digit:]]{4}" input-file

(或)如果要在包含多个此类字符串的文件上运行它,请执行

 var checkKhbVals=["8","9"];
 var url = '@Url.Action("AkademikPersonel_GetMultiCheckBoxKurum", "Doktor")';
            $.getJSON(url, { 'checkKhbVals': JSON.stringify(checkKhbVals) }, function (result, status, xhr) {
                filterMultiCheck.container.empty();               
                filterMultiCheck.checkSource.data(result);
                filterMultiCheck.createCheckBoxes();
            });

答案 1 :(得分:2)

如果日志/行的结构从开始到日期相似,那么可以使用以下内容:

awk '{print $5}' input

或者

grep -oP '([3][0-1]|[1-2][0-9]|[0][1-9])\.([0][0-9]|[1][0-2])\.[0-9]{4}' input

注意:这可能会在feb月份中断。

答案 2 :(得分:0)

说到文本解析,我几乎总是喜欢Perl。

每行多个以逗号分隔的匹配项:

perl -ne '@_=/((?:\d\d\.){2}\d{4})/g and print join(",", @_), "\n"' file

每行多个匹配项合并为一列:

perl -ne 'while (/((?:\d\d\.){2}\d{4})/g) {print "$&\n";}' file

第一场比赛:

perl -ne '/((?:\d\d\.){2}\d{4})/ and print "$1\n"' file

如果日期后跟时间,请将(?: \d\d:\d\d)添加到正则表达式,例如

/((?:\d\d\.){2}\d{4})(?: \d\d:\d\d)/

这将使比赛变得更加严格。请注意,(?:)non-capturing group

我也喜欢grep的{​​{1}}选项,它启用了与Perl兼容的正则表达式:

-P

但是有些实现可能不支持它:

  

这是高度实验性的,grep -P可能会警告未实现的功能。

grep -o -P '(?:\d\d\.){2}\d{4}' file 的手册页)。