Shell を使用して 2 つの特殊文字の間にある文字列を取得するにはどうすればよいでしょうか?

Shell を使用して 2 つの特殊文字の間にある文字列を取得するにはどうすればよいでしょうか?

2つの特殊文字の間の文字列を取得したい。例えば、

/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

関連情報