Trình chỉnh sửa luồng - Cú pháp cơ bản

Chương này giới thiệu các lệnh cơ bản mà SED hỗ trợ và cú pháp dòng lệnh của chúng. SED có thể được gọi dưới hai dạng sau:

sed [-n] [-e] 'command(s)' files 
sed [-n] -f scriptfile files

Dạng đầu tiên cho phép chỉ định các lệnh trong dòng và chúng được đặt trong các dấu nháy đơn. Sau này cho phép chỉ định một tệp kịch bản có chứa các lệnh SED. Tuy nhiên, chúng ta có thể sử dụng cả hai hình thức cùng nhau nhiều lần. SED cung cấp các tùy chọn dòng lệnh khác nhau để kiểm soát hành vi của nó.

Hãy để chúng tôi xem cách chúng tôi có thể chỉ định nhiều lệnh SED. SED cung cấpdeletelệnh xóa một số dòng nhất định. Hãy để chúng tôi xóa các dòng thứ 1, thứ 2 và thứ 5. Trong lúc này, hãy bỏ qua tất cả các chi tiết của lệnh xóa. Chúng ta sẽ thảo luận thêm về lệnh xóa sau.

Đầu tiên, hiển thị nội dung tệp bằng cách sử dụng cat chỉ huy.

[jerry]$ cat books.txt

Khi thực thi đoạn mã trên, bạn nhận được kết quả sau:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Bây giờ hướng dẫn SED chỉ loại bỏ một số dòng nhất định. Ở đây, để xóa ba dòng, chúng tôi đã chỉ định ba lệnh riêng biệt với tùy chọn -e.

[jerry]$ sed -e '1d' -e '2d' -e '5d' books.txt

Khi thực thi đoạn mã trên, bạn nhận được kết quả sau:

3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones, George R. R. Martin, 864

Ngoài ra, chúng ta có thể viết nhiều lệnh SED trong một tệp văn bản và cung cấp tệp văn bản làm đối số cho SED. SED có thể áp dụng từng lệnh trên bộ đệm mẫu. Ví dụ sau minh họa dạng thứ hai của SED.

Đầu tiên, tạo một tệp văn bản chứa các lệnh SED. Để dễ hiểu, chúng ta hãy sử dụng các lệnh SED tương tự.

[jerry]$ echo -e "1d\n2d\n5d" > commands.txt 
[jerry]$ cat commands.txt

Khi thực thi đoạn mã trên, bạn nhận được kết quả sau:

1d 
2d 
5d

Bây giờ hướng dẫn SED đọc các lệnh từ tệp văn bản. Ở đây, chúng ta đạt được kết quả tương tự như trong ví dụ trên.

[jerry]$ sed -f commands.txt books.txt

Khi thực thi đoạn mã trên, bạn nhận được kết quả sau:

3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones,George R. R. Martin, 864

Tùy chọn tiêu chuẩn

SED hỗ trợ các tùy chọn tiêu chuẩn sau:

  • -n: In mặc định bộ đệm mẫu. Ví dụ: lệnh SED sau đây không hiển thị bất kỳ đầu ra nào:

  • [jerry]$ sed -n '' quote.txt
  • -e : Đối số tiếp theo là lệnh chỉnh sửa. Ở đây, dấu ngoặc nhọn ngụ ý tham số bắt buộc. Bằng cách sử dụng tùy chọn này, chúng tôi có thể chỉ định nhiều lệnh. Hãy để chúng tôi in mỗi dòng hai lần:

  • [jerry]$ sed -e '' -e 'p' quote.txt

Khi thực thi đoạn mã trên, bạn nhận được kết quả 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. 
 - Paulo Coelho, The Alchemist 
 - Paulo Coelho, The Alchemist
  • -f : Đối số tiếp theo là tệp chứa các lệnh chỉnh sửa. Dấu ngoặc nhọn ngụ ý tham số bắt buộc. Trong ví dụ sau, chúng tôi chỉ định lệnh in qua tệp:

[jerry]$ echo "p" > commands 
[jerry]$ sed -n -f commands quote.txt

Khi thực thi đoạn mã trên, bạn nhận được kết quả sau:

There is only one thing that makes a dream impossible to achieve: the fear of failure. 
 - Paulo Coelho, The Alchemist

Các tùy chọn cụ thể của GNU

Chúng ta hãy nhanh chóng đi qua các tùy chọn SED cụ thể của GNU. Lưu ý rằng các tùy chọn này là GNU cụ thể; và có thể không được hỗ trợ bởi các biến thể khác của SED. Trong các phần sau, chúng tôi sẽ thảo luận chi tiết hơn về các tùy chọn này.

  • -n, --quiet, --silent: Giống như tùy chọn -n tiêu chuẩn.

  • -e script, --expression = script: Giống như tùy chọn -e tiêu chuẩn.

  • -f script-file, --file = script-file: Giống như tùy chọn -f tiêu chuẩn.

  • --follow-symlinks: Nếu tùy chọn này được cung cấp, SED đi theo các liên kết tượng trưng trong khi chỉnh sửa tệp tại chỗ.

  • -i [SUFFIX], --in-place [= SUFFIX]: Tùy chọn này được sử dụng để chỉnh sửa tệp tại chỗ. Nếu được cung cấp hậu tố, nó sẽ sao lưu tệp gốc, nếu không nó sẽ ghi đè lên tệp gốc.

  • -l N, --line-lenght = N: Tùy chọn này đặt độ dài dòng cho lệnh l thành N ký tự.

  • --posix: Tùy chọn này vô hiệu hóa tất cả các phần mở rộng GNU.

  • -r, --regexp-Extended: Tùy chọn này cho phép sử dụng các biểu thức chính quy mở rộng thay vì các biểu thức chính quy cơ bản.

  • -u, --unbuffered: Khi tùy chọn này được cung cấp, SED tải lượng dữ liệu tối thiểu từ các tệp đầu vào và xóa bộ đệm đầu ra thường xuyên hơn. Nó rất hữu ích để chỉnh sửa đầu ra của "tail -f" khi bạn không muốn đợi đầu ra.

  • -z, --null-data: Theo mặc định, SED phân tách mỗi dòng bằng một ký tự dòng mới. Nếu tùy chọn NULL-data được cung cấp, nó sẽ phân tách các dòng bằng các ký tự NULL.