2016-05-18 2 views
1

Это должен быть простой вопрос. Используя терминал linux, я хочу обрезать изображения в папке с помощью convert и изменить их имя с помощью sed. Например, Следующая один лайнер обрезает изображения в папке, как я ожидал:Вставьте sed в один лайнер, чтобы удалить строку из файла

for file in Screenshot*.png; do convert -crop 1925x1060+10+1 $file newname_$file; done 

Однако, я хочу, чтобы лишить «Screenshot-» строку из файла. С СЭД я мог бы использовать SED -n 'S/Скриншот - // р':

echo "Screenshot-1.png" | sed -n 's/Screenshot\-//p' 

Но как я могу вставить СЕПГ в цикл выше?

Например, если у меня есть папка с этими изображениями:

Screenshot.png Screenshot-1.png Screenshot-2.png do_not_crop.png 

Я ожидаю увидеть эти файлы:

Screenshot.png 1.png 2.png do_not_crop.png 

Дополнительные точки для кто может сказать мне, как преобразовать screenshot.png в 0.png

Edit: на основе ответа hek2mgl, этот скрипт работает:

for file in Screen*png; 
do convert -crop 1925x1060+10+1 $file 
    $(if [[ "$file" == "Screenshot.png" ]]; 
    then echo "0.png"; 
    else echo "${file#Screenshot-}"; 
    fi); 
done 

и выходы 0.png

ответ

3

Я хотел бы использовать в Bash parameter expansion вместо sed.

Пример:

for file in Screenshot.png Screenshot-1.png Screenshot-2.png do_not_crop.png ; do 
    echo "${file#Screenshot-}" 
done 

Выход:

Screenshot.png 
1.png 
2.png 
do_not_crop.png 
Смежные вопросы