Sử dụng sed:
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
Trong lệnh sed, ^
ký tự khớp với văn bản bắt đầu bằng $prefix
và dấu cuối $
khớp với văn bản kết thúc bằng $suffix
.
Adrian Frühwirth đưa ra một số điểm tốt trong các bình luận dưới đây, nhưng sed
với mục đích này có thể rất hữu ích. Thực tế là nội dung của tiền tố $ và hậu tố $ được diễn giải bởi sed có thể là tốt HOẶC xấu - miễn là bạn chú ý, bạn sẽ ổn thôi. Vẻ đẹp là, bạn có thể làm một cái gì đó như thế này:
$ prefix='^.*ll'
$ suffix='ld$'
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
đó có thể là những gì bạn muốn, và vừa huyền ảo vừa mạnh mẽ hơn thay thế bash. Nếu bạn nhớ rằng quyền kiểm soát lớn đến trách nhiệm lớn lao (như Spiderman nói), bạn cần sử dụng tốt.
Giới thiệu nhanh về sed có thể được tìm thấy tại http://evc-cit.info/cit052/sed_tutorial.html
Một lưu ý về vỏ và sử dụng các chuỗi:
Đối với ví dụ cụ thể được đưa ra, những điều sau đây cũng sẽ hoạt động:
$ echo $string | sed -e s/^$prefix// -e s/$suffix$//
... nhưng chỉ vì:
- echo không quan tâm có bao nhiêu chuỗi trong danh sách đối số của nó và
- Không có khoảng trống trong $ tiền tố và hậu tố $
Đó là thực tế chung là tốt để trích dẫn một chuỗi trên dòng lệnh bởi vì ngay cả nếu nó chứa dấu cách nó sẽ được trình bày cho các lệnh như một đối số duy nhất. Chúng tôi trích dẫn $ tiền tố và hậu tố $ với cùng lý do: mỗi chỉnh sửa lệnh để sed sẽ được thông qua như là một chuỗi. Chúng tôi sử dụng dấu ngoặc kép vì chúng cho phép nội suy thay đổi; có chúng tôi sử dụng dấu nháy đơn lệnh sed đã có thể nhận một chữ $prefix
và $suffix
đó chắc chắn không phải là những gì chúng tôi muốn.
Cũng lưu ý rằng, tôi sử dụng dấu ngoặc đơn khi đặt các biến prefix
và suffix
. Chúng tôi chắc chắn không muốn bất cứ điều gì trong chuỗi để được giải thích, vì vậy chúng tôi trích dẫn đơn họ vì vậy không suy diễn ra. Một lần nữa, nó có thể không cần thiết trong ví dụ này nhưng đó là một thói quen rất tốt để tham gia.