Удалить файлы с определенными расширениями с помощью регулярного выражения

Вы пытались загрузить его в «безопасном режиме»? Я не могу вспомнить, имеет ли LiveCD этот параметр или нет. Если это не сработает, вы можете попытаться загрузить и установить с диска «Альтернативная установка» Ubuntu.

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

9 ответов

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

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

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

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

Внутри Makefile вы, вероятно, должны использовать make собственные функции преобразования текста - в случае GNU make, например, вы могли бы использовать 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 make: Функции для подстановки и анализа строк

3
ответ дан 22 May 2018 в 12:34

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

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

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

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

Внутри Makefile вы, вероятно, должны использовать make собственные функции преобразования текста - в случае GNU make, например, вы могли бы использовать 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 make: Функции для подстановки и анализа строк

3
ответ дан 17 July 2018 в 18:49

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

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

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

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

Внутри Makefile вы, вероятно, должны использовать make собственные функции преобразования текста - в случае GNU make, например, вы могли бы использовать 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 make: Функции для подстановки и анализа строк

3
ответ дан 23 July 2018 в 19:38

Прежде всего, не используйте ls, используйте find. Но в любом случае вот что вы ищете в man-странице 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
ответ дан 22 May 2018 в 12:34
  • 1
    Почему лучше использовать find, чем grep? – user1980807 14 March 2018 в 23:21
  • 2
    @ user1980807 не используют ls как входной сигнал для grep. Во многих дистрибутивах ls замаскирован псевдонимами, а также цветным выходом. Это не работает с grep и regx. – Simon Sudler 14 March 2018 в 23:27

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

1
ответ дан 22 May 2018 в 12:34

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

1
ответ дан 17 July 2018 в 18:49

Прежде всего, не используйте ls, используйте find. Но в любом случае вот что вы ищете в man-странице 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
ответ дан 17 July 2018 в 18:49

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

1
ответ дан 23 July 2018 в 19:38

Прежде всего, не используйте ls, используйте find. Но в любом случае вот что вы ищете в man-странице 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
ответ дан 23 July 2018 в 19:38
  • 1
    Почему лучше использовать find, чем grep? – user1980807 14 March 2018 в 23:21
  • 2
    @ user1980807 не используют ls как входной сигнал для grep. Во многих дистрибутивах ls замаскирован псевдонимами, а также цветным выходом. Это не работает с grep и regx. – Simon Sudler 14 March 2018 в 23:27

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

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