bash: как извлечь текст из начала строки до первого числа? [дубликат]



На этот вопрос уже есть ответ здесь:



У меня есть куча файлов с такими именами:



text 01 (blabla) other text
text 02 (whatever) other text
.
.
text 025 (etc) other tex

some text 1 (20031020) other text
some text 2 (20031022) other text
.
.
some text 10 (20031025) other text

some new text 01 other text
.
.
.
some new text 200 other text


И я хочу извлечь из имени файла только слова перед первым номером, поэтому из приведенного выше примера я хочу получить:



text
some text
some new text


Я хочу сделать это переместить каждый файл в папку принадлежности в зависимости от имени файла (или создать папку, если она не существует).



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

570   2  

2 ответов:

Используйте ${variable%%pattern} (Этот шаблон удаления суффикса).

$ filename='text 01 (blabla) other text'
$ echo ${filename%%[0-9]*}
text

Вы можете использовать use sed:

printf "%s\n" *[[:space:]][0-9]* | sed 's/^\([^0-9]*\) [0-9].*$/\1/'

Comments

    Ничего не найдено.