Удалите файлы с определенными расширениями regexp

У меня есть Make-файл для компиляции ЛАТЕКСА *.tex файл (tex-> dvi-> PS-> PDF). Затем у меня есть команда, чистая для удаления ненужных временных файлов (dvi, PS...) как это:

rm `ls | grep "^${FILENAME}\.(aux|dvi|ps|log)"`

но это удаляет даже *.pdf файл, который я должен сохранить. Если я повторяю результат ls | grep, я нашел, требуются все файлы, расширение которых начинается с первой буквы расширения в regexp, таким образом,

echo `ls | grep "^${FILENAME}\.[aux|dvi|ps|log]"`

#echoes proj.aux proj.dvi proj.log proj.pdf proj.ps

Другие файлы оставляют неизменными (*.tex)

Как я выбираю только файлы с расширениями от regexp (и не *.pdf)?Заранее спасибо.

0
задан 14 March 2018 в 08:13

3 ответа

На командной строке необходимо использовать шарик оболочки вместо того, чтобы пытаться regex-соответствовать выводу ls. Например, в ударе Вы могли использовать любого расширение фигурной скобки

rm "$FILENAME".{aux,dvi,log,ps} 

или (если расширено globbing включен),

rm "$FILENAME".!(tex|pdf)

В Make-файле необходимо, вероятно, использовать make собственные текстовые функции преобразования команды - в случае GNU делают, например, Вы могли использовать addprefix например.

FILENAME = foo

.PHONY: clean
clean:
        @echo rm $(addprefix $(FILENAME),.aux .dvi .log .ps)

предоставление

$ make clean
rm foo.aux foo.dvi foo.log foo.ps

Посмотрите, что GNU делает: Функции для Строковой Замены и Анализа

3
ответ дан 30 October 2019 в 06:27

Это выражение сработало: ls | grep -E ".(aux|dvi|ps|log)". Вы не использовали флаг -E, который позволяет grep использовать расширенные регулярные выражения (т. Е. Позволяет | интерпретироваться как оператор или). Примечание: вы могли бы также сделать ls | grep -E ".aux|dvi|ps|log" и получить желаемый результат.

1
ответ дан 30 October 2019 в 06:27

В первую очередь, не используйте ls, использование находят. Но так или иначе вот то, что Вы ищете в grep странице справочника:

   Matcher Selection
   -E, --extended-regexp
          Interpret PATTERN as an extended regular  expression  (ERE,  see
          below).

так используйте что-то вроде этого:

echo `find . | grep -E "^${FILENAME}\.(aux|dvi|ps|log)"`
1
ответ дан 30 October 2019 в 06:27

Другие вопросы по тегам:

Похожие вопросы: