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, и я знаю, что это можно сделать с помощью регулярных выражений, но я не знаю, как, я видел только пример, где поле разделено известными символами, в то время как в этом случае пределом является пробел, за которым следует любое число.
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