Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用shell脚本在给定文件名中分别获取日期和字符串_Shell_Unix - Fatal编程技术网

如何使用shell脚本在给定文件名中分别获取日期和字符串

如何使用shell脚本在给定文件名中分别获取日期和字符串,shell,unix,Shell,Unix,嗨,我正在尝试从给定的文件名中分别获取日期和字符串,但没有确切的方法 这是文件名“95FILRDF01PUBLI20170823XEURC0V4100.XML” 我想从这个文件名中提取日期“20170823”和字符串“XEUR” 我在Stackexchange/Stackoverflow中浏览了很多帖子,但不了解他们使用的正则表达式 要提取日期和名称: $ name="95FILRDF01PUBLI20170823XEURC0V41000.XML" $ echo "$name" | sed -

嗨,我正在尝试从给定的文件名中分别获取日期和字符串,但没有确切的方法

这是文件名“95FILRDF01PUBLI20170823XEURC0V4100.XML” 我想从这个文件名中提取日期“20170823”和字符串“XEUR”

我在Stackexchange/Stackoverflow中浏览了很多帖子,但不了解他们使用的正则表达式


要提取日期和名称:

$ name="95FILRDF01PUBLI20170823XEURC0V41000.XML"
$ echo "$name" | sed -E 's/.*([[:digit:]]{8})([[:alpha:]]{4}).*/date=\1 name=\2/'
date=20170823 name=XEUR
正则表达式的关键部分是
([[:digit:]{8})([[:alpha:]{4})
。第一部分,
([[:digit:]{8})
匹配8位数字并将其保存为组1。第二部分,
([[:alpha:]{4})
匹配日期后的四个字母,并将它们保存为第2组

关键部分由
*
前面和
*
后面包围,后面与剩余部分匹配


替换文本是
date=\1 name=\2
,用于格式化输出。

好吧,您自己也有点困难,因为很难锚定正则表达式的开头以提取日期。(字母/数字混在一起,除了每8个字符检查一次作为日期外,没有实际模式)日期之前是否总是有
PUBLI
,之后是
XEUR
?(或者你只是在谈论这个文件名?)好的,回答得很好,但是如果在日期之前出现另一个8+4怎么办?@DavidC.Rankin如果你的意思是这个问题可能没有指定,那么你是完全正确的。OP必须让我们知道更多。不,不,我不是在否定你的答案(我投了赞成票)。我也想到了同样的事情,但我不确定他是在拿这个文件名还是一个可能会丢失的整个目录。正如我所说,答案很好。很好,我只是一下子做了两件事,误读了你评论的第一部分,想确保你知道我100%同意答案,我现在看到我们在同一张纸上开始了。@John and@David谢谢你的回答。我的目录中只有这个文件模式。