我在.txt文件中得到了这样的字符串列表
asdafdgdhjhgk.de/dsafdfdfgfdggfgg - Abgelaufen seit 26.11.2076 14:08 (seit 12345 Tagen)
现在我想从字符串中删除日期:26.11.2076
这一切都必须在Shell脚本中发生,所以我通过cut
或sed
会是一个好主意,但我没有在互联网上找到答案。
答案 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
的手册页)。