Trình chỉnh sửa luồng - Quy trình làm việc

Trong chương này, chúng ta sẽ tìm hiểu cách thức hoạt động chính xác của SED. Để trở thành một người dùng SED chuyên nghiệp, một người cần phải biết nội bộ của nó. SED tuân theo một quy trình làm việc đơn giản: Đọc, Thực thi và Hiển thị. Sơ đồ sau đây mô tả quy trình làm việc.

  • Read: SED đọc một dòng từ luồng đầu vào (tệp, đường dẫn hoặc stdin) và lưu trữ nó trong bộ đệm nội bộ được gọi là pattern buffer.

  • Execute: Tất cả các lệnh SED được áp dụng tuần tự trên bộ đệm mẫu. Theo mặc định, các lệnh SED được áp dụng trên tất cả các dòng (trên toàn cầu) trừ khi địa chỉ dòng được chỉ định.

  • Display: Gửi nội dung (đã sửa đổi) đến luồng đầu ra. Sau khi gửi dữ liệu, bộ đệm mẫu sẽ trống.

  • Quá trình trên lặp lại cho đến khi hết tệp.

Điểm cần lưu ý

  • Bộ đệm mẫu là một vùng lưu trữ dễ bay hơi, trong bộ nhớ được sử dụng bởi SED.

  • Theo mặc định, tất cả các lệnh SED được áp dụng trên bộ đệm mẫu, do đó tệp đầu vào không thay đổi. GNU SED cung cấp một cách để sửa đổi tệp đầu vào tại một nơi. Chúng ta sẽ khám phá về nó trong các phần sau.

  • Có một vùng bộ nhớ khác được gọi là hold buffercũng là vùng lưu trữ riêng, trong bộ nhớ, dễ bay hơi. Dữ liệu có thể được lưu trữ trong bộ đệm lưu giữ để truy xuất sau này. Vào cuối mỗi chu kỳ, SED xóa nội dung của bộ đệm mẫu nhưng nội dung của bộ đệm lưu giữ vẫn tồn tại giữa các chu kỳ SED. Tuy nhiên, các lệnh SED không thể được thực hiện trực tiếp trên bộ đệm giữ, do đó SED cho phép di chuyển dữ liệu giữa bộ đệm giữ và bộ đệm mẫu.

  • Ban đầu, cả bộ đệm mẫu và bộ đệm giữ đều trống.

  • Nếu không có tệp đầu vào nào được cung cấp, thì SED chấp nhận đầu vào từ luồng đầu vào chuẩn (stdin).

  • Nếu dải địa chỉ không được cung cấp theo mặc định, thì SED hoạt động trên mỗi dòng.

Ví dụ

Hãy để chúng tôi tạo một tệp văn bản quote.txt để chứa một câu nói của tác giả nổi tiếng Paulo Coelho.

[jerry]$ vi quote.txt 
There is only one thing that makes a dream impossible to achieve: the fear of failure. 
 - Paulo Coelho, The Alchemist

Để hiểu quy trình làm việc của SED, hãy để chúng tôi hiển thị nội dung của tệp quote.txt bằng SED. Ví dụ này mô phỏngcat chỉ huy.

[jerry]$ sed '' quote.txt

Khi đoạn mã trên được thực thi, nó sẽ cho ra kết quả như sau.

There is only one thing that makes a dream impossible to achieve: the fear of failure.

Trong ví dụ trên, quote.txt là tên tệp đầu vào và trước đó có một cặp dấu nháy đơn ngụ ý lệnh SED. Hãy để chúng tôi làm sáng tỏ hoạt động này.

Đầu tiên SED đọc một dòng từ tệp tin đầu vào quote.txt và lưu trữ nó trong bộ đệm mẫu của nó. Sau đó, nó áp dụng các lệnh SED trên bộ đệm mẫu. Trong trường hợp của chúng tôi, không có lệnh SED nào ở đó, do đó không có thao tác nào được thực hiện trên bộ đệm mẫu. Cuối cùng, nó xóa và in nội dung của bộ đệm mẫu trên đầu ra tiêu chuẩn. Thật không đơn giản phải không?

Trong ví dụ sau, SED chấp nhận đầu vào từ luồng đầu vào chuẩn.

[jerry]$ sed '' 
       
      

Khi đoạn mã trên được thực thi, nó sẽ cho ra kết quả như sau.

There is only one thing that makes a dream impossible to achieve: the fear of failure. 
There is only one thing that makes a dream impossible to achieve: the fear of failure.

Ở đây, dòng đầu tiên được nhập thông qua bàn phím và dòng thứ hai là đầu ra do SED tạo ra. Để thoát khỏi phiên SED, nhấn ctrl-D (^ D).