Tôi không chắc tại sao tiêu đề câu hỏi này đã được chỉnh sửa " từ tệp " thành " từ một dòng " trong khi OP không loại trừ khả năng trên nhiều dòng mặc dù ví dụ này dường như chỉ là một dòng. Dù thế nào, nó có thể hữu ích để cung cấp giải pháp nhiều dòng ở đây.
Điều này hoạt động cho dòng chéo:
from1=consectetuer; to2=elit; a="$(cat file)"; a="$(echo "${a#*"$from1"}")"; echo "$from1${a%%"$to2"*}$to2"
Ví dụ:
[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]$
tham khảo: Mở rộng tham số Shell
sed
. Nó cũng có thểperl
, hoặc thậm chí là bash tinh khiết.