No estoy seguro de por qué el título de esta pregunta se ha editado " desde el archivo " a " desde una línea ", mientras que el OP no excluye la posibilidad en varias líneas, aunque el ejemplo parece ser solo una línea. Lo que sea, puede ser útil proporcionar una solución de líneas múltiples aquí.
Esto funciona para líneas cruzadas:
from1=consectetuer; to2=elit; a="$(cat file)"; a="$(echo "${a#*"$from1"}")"; echo "$from1${a%%"$to2"*}$to2"
Ejemplos:
[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]$
referencia: Expansión de parámetros de Shell
sed
. También puede serperl
, o incluso puro golpe.