Não sei por que esse título da pergunta foi editado " do arquivo " para " de uma linha ", enquanto o OP não exclui a possibilidade em várias linhas, mesmo que o exemplo pareça ser apenas uma linha. Seja como for, pode ser útil fornecer uma solução de várias linhas aqui.
Isso funciona para linhas cruzadas:
from1=consectetuer; to2=elit; a="$(cat file)"; a="$(echo "${a#*"$from1"}")"; echo "$from1${a%%"$to2"*}$to2"
Exemplos:
[xiaobai@xiaobai tmp]$ cat file
1
abc consectetuer lsl
home
def elit dd
2 consectetuer ABC elit
[xiaobai@xiaobai tmp]$ from1=consectetuer; to2=elit; a="$(cat file)"; a="$(echo "${a#*"$from1"}")"; echo "$from1${a%%"$to2"*}$to2"
consectetuer lsl
home
def elit
[xiaobai@xiaobai tmp]$
Referência: Expansão de Parâmetro do Shell
sed
. Também pode serperl
, ou até pura festa.