Saya tidak yakin mengapa judul pertanyaan ini telah diedit " dari file " ke " dari satu baris " sementara OP tidak mengecualikan kemungkinan di beberapa baris meskipun contohnya tampaknya hanya satu baris. Apa pun itu, mungkin bermanfaat untuk memberikan solusi beberapa jalur di sini.
Ini bekerja untuk garis silang:
from1=consectetuer; to2=elit; a="$(cat file)"; a="$(echo "${a#*"$from1"}")"; echo "$from1${a%%"$to2"*}$to2"
Contoh:
[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]$
referensi: Ekspansi Parameter Shell
sed
. Bisa jugaperl
, atau bahkan bash murni.