Как извлечь строку между N-м и M-м вхождениями шаблона?

Простой пример изменения префикса и расширения всех изображений в текущей папке.

prefix=EG_
extension=.jpg
for i in $(ls); do mv $i "$prefix${i%.JPG}$extension";  done

Если вы хотите проверить, как это повлияет на ваши данные перед их изменением, замените mv на echo

, вывод для IMG_7993.JPG - EG_IMG_7993.jpg

{{1} }
0
25.06.2016, 12:13
2 ответа

Если вы хотите использовать один из упомянутых вами инструментов, вы можете сделать это с помощью sed :

echo "/Folder/F1/F2/F3/F4/.../Fn/abc.txt" | sed "s/\/[^/]*$//"
sed -i "s/\/[^/]*$//" path.txt

Если вы используете bash, вы можете использовать для этого расширение параметров Bash:

path=$(cat path.txt)
echo "${path%/*}"

И, как упоминалось в ikkachu , вы можете использовать ] dirname .

2
29.04.2021, 00:13

basename и dirname печатают последнюю и предпоследнюю части имени файла, указанного в качестве аргумента, поэтому:

$ dirname "/Folder/F1/F2/F3/F4/.../Fn/abc.txt" 
/Folder/F1/F2/F3/F4/.../Fn

(или из файла: dirname "$ ()

2
29.04.2021, 00:13

Теги

Похожие вопросы