Как получить строку между двумя специальными символами с помощью Shell?

Как получить строку между двумя специальными символами с помощью Shell?

Я хочу получить строку между двумя специальными символами. Например,

/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

Связанный контент