#bash
#bash
Вопрос:
Мне нужно разделить строку при последнем вхождении разделителя и разделить обе части на две переменные.
Ввод может быть
- stringOne_One/stringOne_Two/stingOne_Three
- stringTwo_One/stringTwo_Two
Я хочу разделить строку при последнем вхождении разделителя «/» и получить как первую, так и последнюю часть строки на две переменные.
Для первого примера вывод должен быть
var1=stringOne_One/stringOne_Two
var2=stringOne_Three
Для второго примера вывод должен быть
var1=stringTwo_One
var2=stringTwo_Two
Как мне это сделать в bash. Предпочел бы решение с использованием AWK, но любой другой метод также приемлем.
Комментарии:
1. Мы призываем спрашивающих показать, что они пытались до сих пор, чтобы решить проблему самостоятельно.
2. @Cyrus: Извините за это. Будем иметь это в виду в будущем.
Ответ №1:
Используйте dirname
и basename
тому подобное:
my_var='stringOne_One/stringOne_Two/stingOne_Three'
var1=$(basename $my_var)
# stingOne_Three
var2=$(dirname $my_var)
# stringOne_One/stringOne_Two
Комментарии:
1. Принят ответ @markp-fuso, поскольку он может быть расширен и для других разделителей.
Ответ №2:
С bash
помощью и регулярного выражения:
string='stringOne_One/stringOne_Two/stingOne_Three'
[[ "$string" =~ (.*)/(.*) ]]
var1="${BASH_REMATCH[1]}"
var2="${BASH_REMATCH[2]}"
Ответ №3:
Использование расширения параметров:
$ x="stringOne_One/stringOne_Two/stingOne_Three"
$ var1="${x%/*}"
$ var2="${x##*/}"
$ echo "${var1} : ${var2}"
stringOne_One/stringOne_Two : stingOne_Three
$ x="stringTwo_One/stringTwo_Two"
$ var1="${x%/*}"
$ var2="${x##*/}"
$ echo "${var1} : ${var2}"
stringTwo_One : stringTwo_Two