To get char between pattern

hi,
this my text
......................
Read 21 physical / 21 logical HMMs
Read lattice with 16 nodes / 36 arcs
Created network with 53 nodes / 73 links
File: speech.mfc
!sil two eight six nine six eight !sil == [615 frames] -68.5133 [Ac=-41415.7 LM=-720.0] (Act=50.4)......................

i need to extract output text as two eight six nine six eight(i.e char between !sil)

One way:

awk -F'!sil' '/!sil/{print $2}' file

Guru.

Here's another way:

grep -o '!sil .* !sil' temp.txt | sed 's/!sil//g'

thanks this is what iam looking two

Try also

$ sed -rn 's:^!sil | !sil.*$::gp' file
two eight six nine six eight