
Я хочу получить строку между двумя специальными символами. Например,
/home/oracle/ggs/text.ext
Я хочуоракул/ggsв строке выше.
Как это сделать с помощью bash?
решение1
$ expr /home/oracle/ggs/text.ext : '/home/\(.*\)/'
oracle/ggs
Это возвращает часть после /home/
и до последнего /
.
Другие возможные подходы, которые будут соответствовать вашим требованиям:
$ echo /home/oracle/ggs/text.ext | cut -d/ -f3,4
oracle/ggs
$ echo /home/oracle/ggs/text.ext | cut -c 7-16
oracle/ggs
$ echo oracle/ggs
oracle/ggs
решение2
Для этого конкретного примера вы можете использовать awk
:
echo "$string" | awk -F '/' '{printf "%s%s%s\n" ,$2,FS,$3}'
То же самое в Perl:
echo "$string" | perl -lanF '/' -E '$,="/";say @F[1,2]'
решение3
Баш
IFS=/ read -ra a <<<'/home/oracle/ggs/text.ext' &&
(IFS=/; printf '%s\n' "${a[*]:2:2}")
oracle/ggs