Я не уверен, почему заголовок этого вопроса был отредактирован « из файла » в « из строки », в то время как ОП не исключает возможность для нескольких строк, даже если пример выглядит как одна строка. Как бы то ни было, здесь может оказаться полезным решение с несколькими строками.
Это работает для перекрестных линий:
from1=consectetuer; to2=elit; a="$(cat file)"; a="$(echo "${a#*"$from1"}")"; echo "$from1${a%%"$to2"*}$to2"
Примеры:
[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]$
ссылка: Расширение параметров оболочки
sed
. Это также может бытьperl
или даже чистый удар.