Присвоение только части строки переменной в bash

Загрузите, запишите и установите Lubuntu с альтернативного установочного диска. Здесь вы найдете всю необходимую информацию: https://help.ubuntu.com/community/Lubuntu/Alternate_ISO

1
задан 10 November 2016 в 17:56

2 ответа

Вот пример с использованием cut

echo "/home/myusername/folder1/folder2/folder3" | cut -d '/' -f4- 

folder1/folder2/folder3

Если вам нужен ведущий /, вы можете добавить | sed 's/^/\//' в конец вашей строки.

Вы необходимо -f4-, потому что -d '/' сообщает cut использовать / в качестве разделителя между полями. Итак, первое поле появляется перед первым разделителем, в этом случае первое поле пусто. Таким образом, folder1 - это 4-е поле, а -f4- сообщает разрезать, чтобы использовать все поля с 4-го и далее.

9
ответ дан 23 May 2018 в 04:20

Вы можете использовать расширение параметра bash следующим образом:

target_path=/home/username/folder1/folder2/folder3
myvar="/${target_path#/*/*/}"

После этого:

echo $myvar

дает:

/folder1/folder2/folder3

Это работает удалив первое совпадение шаблона /*/*/ из переменной target_path, используя синтаксис расширения параметра ${target_path#pattern}. К сожалению, это удаляет первый символ /, поэтому этот символ должен быть явно включен при установке переменной myvar.

Внимание: вы должны проверить, что ваша переменная target_path содержит некоторые символы и длиннее двух перед использованием этого метода. Например, если target_path=/home/username/, то myvar=/. Это может быть опасно для вашей системы, если вы используете что-то вроде rm -rf "$myvar"*. Не пытайтесь это!

7
ответ дан 23 May 2018 в 04:20
  • 1
    Путь может быть 30 папок, и я хочу включить только последние 28. Будет ли это работать? – Life of pi 10 November 2016 в 18:16
  • 2
    Определенно, это будет только обрезать первые два, независимо от длины пути. – Arronical 10 November 2016 в 18:18

Другие вопросы по тегам:

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