2011-02-02 3 views
1

В bash. Так что 001 file.ext становится file.ext. Как мне это сделать?Слить несколько наименований ведущих номеров и пробелов

+0

Итак, это ошибочный факт, что у вас есть два i в «файле»? То есть вы действительно хотите, чтобы он конвертировал из 001 fiile.ext в file.ext или вы хотите, чтобы он преобразовал 001 file.ext в file.ext? – jwir3

ответ

1

Вы можете использовать два выражения seds. Первый удаляет все до последнего пространства, а второй удаляет ведущие цифры.

$ echo "001 fiile.ext" | sed -e 's/^.* //' -e 's/^[0-9]*//g' 
fiile.ext 
+0

Это может не соответствовать потребностям плаката - например, если в имени файла есть пробелы, оставшиеся после того, как ведущие числа и пробелы будут удалены. Это может быть исправлено с небольшой настройкой вашего выражения sed: echo «001 fiile.ext» | sed -e 's/^ [0-9] * //' –

1
for f in *file.ext 
do 
    newname=$(echo "$f" | sed 's/^[0-9 ]*//') 
    mv "$f" "$newname" 
done 

Или в чистом Баш:

shopt -s extglob 
for f in *file.ext 
do 
    mv "$f" "${f##+([0-9 ])}" 
done 
0

Если вы просто хотите, чтобы преобразовать имена файлов (как вары в сценарии), вы можете просто сделать что-то вроде:

[[ $FILENAME =~ ^[0-9\s]+(.+) ]] && FILENAME="${BASH_REMATCH[1]}" 

Если вы пытаетесь на самом деле переименовать имена файлов в файловой системе, что-то вроде этого более подходит

for F in *.ext; do 
    [[ $F =~ ^[0-9\s]+(.+) ]] && mv "$F" "${BASH_REMATCH[1]}" 
done 
Смежные вопросы