¿Cómo obtener una cadena entre dos caracteres especiales usando Shell?

¿Cómo obtener una cadena entre dos caracteres especiales usando Shell?

Quiero obtener una cadena entre dos caracteres especiales. Por ejemplo,

/home/oracle/ggs/text.ext

Quierooráculo/ggsen la cadena anterior.

¿Cómo puedo hacer esto usando bash?

Respuesta1

$ expr /home/oracle/ggs/text.ext : '/home/\(.*\)/'
oracle/ggs

Eso devuelve la parte después /home/y antes de la última /.

Otros enfoques posibles que cumplirán con sus requisitos:

$ 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

Respuesta2

Para este ejemplo en particular, puedes usar awk:

echo "$string" | awk -F '/' '{printf "%s%s%s\n" ,$2,FS,$3}'

Lo mismo en Perl:

echo "$string" | perl -lanF '/' -E '$,="/";say @F[1,2]'

Respuesta3

Intento

IFS=/ read -ra a <<<'/home/oracle/ggs/text.ext' && 
(IFS=/; printf '%s\n' "${a[*]:2:2}") 
oracle/ggs

información relacionada