regex用*和path替换文件名,扩展名应保持原样

时间:2019-01-07 13:30:01

标签: regex makefile

我有近6000个文件名(包括绝对路径),如何仅用*代替文件名而不是整个路径。寻找正则表达式仅查找文件名。

$(wildcard C:/subfolder/subfolder/subfolder/dsfsdfs_files/colorschememapping.xml) \
$(wildcard C:/subfolder/subfolder/subfolder/fsdewrwebxd_files/filelist.xml) \
$(wildcard C:/subfolder/subfolder/subfolder/FallingEdgeDelay_files/themedata.thmx) \
$(wildcard C:/subfolder/subfolder/subfolder/test/Fed_XX.xlsx) \
$(wildcard C:/subfolder/subfolder/subfolder/test/Fed_results.mat) \
$(wildcard C:/subfolder/subfolder/subfolder/test/Fed_test.slx) \

结果应该是

$(wildcard C:/subfolder/subfolder/subfolder/dsfsdfs_files/*.xml) \
$(wildcard C:/subfolder/subfolder/subfolder/FallingEdgeDelay_files/*.thmx) \
$(wildcard C:/subfolder/subfolder/subfolder/test/*.xlsx) \
$(wildcard C:/subfolder/subfolder/subfolder/test/*.mat) \
$(wildcard C:/subfolder/subfolder/subfolder/test/*.slx) \

1 个答案:

答案 0 :(得分:0)

对于您的问题,我并不十分清楚。但是您在评论中说:

  

我已经使用递归dir命令捕获了文件列表,并重定向到txt文件。我想用*替换所有文件名,并将其放入变量中以创建依赖项列表。

由此看来,这并不困难。假设您的文本文件为foo.txt

C:/subfolder/subfolder/subfolder/dsfsdfs_files/colorschememapping.xml
C:/subfolder/subfolder/subfolder/fsdewrwebxd_files/filelist.xml
C:/subfolder/subfolder/subfolder/FallingEdgeDelay_files/themedata.thmx
C:/subfolder/subfolder/subfolder/test/Fed_XX.xlsx
C:/subfolder/subfolder/subfolder/test/Fed_results.mat
C:/subfolder/subfolder/subfolder/test/Fed_test.slx

人们可以通过多种方式摆脱文件名。例如,

sed 's_[^/]*\.\([^./]*\)$_*.\1_' foo.txt

给出:

C:/subfolder/subfolder/subfolder/dsfsdfs_files/*.xml
C:/subfolder/subfolder/subfolder/fsdewrwebxd_files/*.xml
C:/subfolder/subfolder/subfolder/FallingEdgeDelay_files/*.thmx
C:/subfolder/subfolder/subfolder/test/*.xlsx
C:/subfolder/subfolder/subfolder/test/*.mat
C:/subfolder/subfolder/subfolder/test/*.slx

正则表达式的解释:

  • 在行的处搜索something.else,其中
  • something不包含/,以及其中
  • else不包含/或句点,并且
  • 然后将其替换为*.else

您可能要添加:

| sort | uniq

在此之后删除所有重复项。

最后,您可以通过以下方式将其转换为适合粘贴到Makefile中的形式:

| sed 's/^/$(wildcard /;s/$/) \\/'

获得:

$(wildcard C:/subfolder/subfolder/subfolder/dsfsdfs_files/*.xml) \
$(wildcard C:/subfolder/subfolder/subfolder/fsdewrwebxd_files/*.xml) \
$(wildcard C:/subfolder/subfolder/subfolder/FallingEdgeDelay_files/*.thmx) \
$(wildcard C:/subfolder/subfolder/subfolder/test/*.xlsx) \
$(wildcard C:/subfolder/subfolder/subfolder/test/*.mat) \
$(wildcard C:/subfolder/subfolder/subfolder/test/*.slx) \