Linux 如何从文件夹或文件名中提取特定名称

Linux 如何从文件夹或文件名中提取特定名称,linux,awk,csh,Linux,Awk,Csh,我不熟悉linux命令 现在,我只想从列出的文件名中提取日期值,并将其作为日期值进行比较 示例: /目录下 20080206 20080207 bk_20080208 我想列出以上所有目录并比较日期,这意味着该目录大于或小于指定日期的目录。 如果列出的所有目录都是日期,则可以进行条件检查 代码 foreach date\u目录(ls) 如果(“$date\u directory”>=“$fdate”&&“$date\u directory”>${output} endif 结束 但如果包含一些单

我不熟悉linux命令

现在,我只想从列出的文件名中提取日期值,并将其作为日期值进行比较

示例:
/目录下

20080206
20080207
bk_20080208

我想列出以上所有目录并比较日期,这意味着该目录大于或小于指定日期的目录。 如果列出的所有目录都是日期,则可以进行条件检查

代码 foreach date\u目录(
ls

如果(“$date\u directory”>=“$fdate”&&“$date\u directory”>${output}
endif
结束

但如果包含一些单词,如“bk_20080228”或“bk_20080228_bk”或“20080228_bk”或“20080228_tt”,则条件检查将出错

bk_20080208只想服用20080208

请帮帮我。
谢谢!

使用grep regexp
grep-Eo'[0-9]{4}[0-9]{2}[0-9]{2}'
grep-Eo'[0-9]+'

   shopt -s nullglob
   for i in *;do echo $i|sed 's/.*_//';done

输出可以根据需要重定向。

因此,您的输入是一个包含1行和3个字段的文件,您希望一个工具只输出最后一个字段,并从中删除
bk
,对吗?如果您需要其他内容,请更新您的问题以澄清。对不起,我的不清楚之处。我的意思是在父文件夹下有文件夹列表。(例如,test1folder有3个类似于我的帖子的文件夹。)。因此,我只想提取20080208。UNIX中没有文件夹,有目录和文件。假设您有一个目录,其中有3个文件。您是说要在该目录下查找名称以
-bk\uu
开头的文件,并打印该文件名的后续数字,但忽略所有其他文件名称?如果不是,请再次-请更新您的问题以澄清。此外,如果您的文件名不是真正以
-
s开头,请不要在您发布的示例输入中将
-
s放在它们前面。我已经修改了我的帖子。请检查一下。对于我的不清楚之处,很抱歉。为什么不将“[0-9]{4}[0-9]{2}[0-9]{2}”替换为
[0-9]{8}”
?可以替换。我提取了年、月和日