[^ /] + $
- это регулярное выражение для «Один или несколько любых символов, не являющихся слэш, за которым следует конец проверяемой строки ". Проверяемая строка: /root/Source/code/script.sh
; часть этой строки, которая соответствует шаблону, - это script.sh
. grep -o
возвращает только совпавший шаблон, а не всю совпавшую строку.
grep
по отдельности и замена мне не кажутся полезной комбинацией. Как вы относитесь к sed
?
$ ls *pdf
Guide to Iceland _ Chen-ping Wang itinerary T-987654987.pdf
Guide to Iceland _ T-123654875 Chen-ping Wang itinerary.pdf
А затем небольшой цикл for вbash
:
$ for i in *pdf; do mv "$i" "$( echo $i | sed -r 's/^(.*)(T-[0-9]{9})(.+)$/\2 - \1\3/' )"; done
Это перебирает все PDF-файлы в текущем каталоге; сохраняет свое имя в $i
для каждой итерации, выводит содержимое через sed (и использует его вывод в качестве целиmv
). sed
разбивает имя файла -на три части и переставляет их. Я рекомендую заменить mv
на echo mv
для тестирования:)
Что дает нам:
$ ls *pdf
T-123654875 - Guide to Iceland _ Chen-ping Wang itinerary.pdf
T-987654987 - Guide to Iceland _ Chen-ping Wang itinerary.pdf