регулярное выражение для замены имени файла на * и путь, расширение должно быть таким, как оно есть - PullRequest
0 голосов
/ 07 января 2019

У меня есть около 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 голосов
/ 09 января 2019

Мне не совсем понятен ваш вопрос. Но вы говорите в комментарии:

Я уже перехватил список файлов с помощью рекурсивной команды dir и перенаправил его в текстовый файл. Я хочу заменить все имена файлов на * и поместить его в переменную, чтобы составить список зависимостей.

От этого это не так уж сложно. Предположим, ваш текстовый файл 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) \
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...