Sau grep, bước hợp lý tiếp theo là hướng dẫn về sed. Lệnh sed đến từ Stream EDitor, và như tên gọi của nó, nó xử lý thông lượng văn bản. Tuy nhiên, nếu sed là một trong những lệnh mạnh nhất trong Unix, thì trang hướng dẫn sử dụng của nó cũng nằm trong số bí ẩn nhất. Tôi sẽ cố gắng trong bài viết này để tóm tắt cách sử dụng cơ bản nhất của sed và sau đó cung cấp cho bạn một vài ví dụ về các tập lệnh nâng cao.

Khái niệm cơ bản

Lệnh chung cho sed là một cái gì đó như:

Sed sẽ thực hiện các thao tác mà bạn muốn anh ta thực hiện trên tệp văn bản và hiển thị kết quả ở đầu ra chuẩn. Nếu bạn muốn kết quả trong một tệp văn bản, bạn có thể chuyển hướng nó qua phương pháp thông thường:

Hoặc sử dụng tùy chọn -i sẽ trực tiếp chỉnh sửa tệp đầu vào:

Bây giờ chúng ta hãy bắt đầu làm việc trên tập lệnh. Bước đầu tiên rõ ràng nhất là tập lệnh null:

sẽ chỉ hiển thị văn bản trong test.txt.

Một cách sử dụng tốt của sed là xóa. Hãy thực hành thông qua các ví dụ.

sẽ xóa các dòng từ 2 đến 4 của test.txt.

Bạn có thể đoán rằng cú pháp của tập lệnh là:

Nhưng phần lạ mắt xuất hiện khi bạn sử dụng biểu thức chính quy, hoặc regex, làm dấu phân cách cho việc xóa. Ví dụ,

sẽ xóa mọi dòng bắt đầu bằng # (nói cách khác, nếu bạn viết mã, nó sẽ xóa tất cả các bình luận của bạn).

sed-diezd

Cú pháp chung là

để xóa dòng chứa regex.

để xóa khoảng thời gian từ dòng chứa regex1 đến dòng chứa regex2.

Nhân vật đặc biệt ^ mà tôi đã sử dụng trong ví dụ đầu tiên là để chỉ ra đầu dòng.

Sau đó, cách sử dụng cơ bản thứ hai mà tôi có thể nghĩ đến là thay thế. Cú pháp chung là:

Nó sẽ có hiệu lực để tìm kiếm trong dòng đầu tiên cho regex1, thay thế nó bằng regex2, chuyển đến dòng tiếp theo và lặp lại cho đến khi kết thúc dòng nhập.

Một ví dụ điển hình là:

quyến rũ

Nó sẽ thay thế biểu tượng # ở đầu dòng và tất cả các khoảng trống không có gì. Nói cách khác, nó bỏ ghi chú tệp văn bản. Biểu tượng * là một siêu ký tự thiết kế 0 hoặc nhiều khoảng trống ở đây.

Trình độ cao

Bạn có thể làm một số việc khá lạ mắt với sed, nhưng bạn sẽ đạt đến giới hạn khá nhanh nếu bạn không chú ý đến hành vi cơ bản của nó. Sed xử lý dòng chảy một cách tuyến tính: Nó áp dụng cách xử lý từng dòng cho một tệp văn bản. Nếu bạn muốn thực hiện nhiều sửa đổi cho cùng một dòng, bạn phải sử dụng nhãn và xử lý nhiều dòng. Tất cả những điều này có thể trở nên rất phức tạp, rất nhanh chóng. Bây giờ tôi sẽ chỉ cho bạn một vài ví dụ nâng cao và giải thích chúng cho bạn. Nếu bạn muốn nhiều hơn nữa, tôi chắc chắn rằng bạn có thể tự tìm kiếm và sử dụng những điều cơ bản mà tôi đã cung cấp cho bạn.

Nếu bạn muốn xóa các dòng trống của tệp, bạn có thể sử dụng lệnh

Siêu ký tự $ cuối dòng, vì vậy ^$ thiết kế một dòng trống. Sau đó, {N;D} là một cú pháp khá phức tạp để nói rằng xóa dòng đó.

Nếu bạn muốn xóa mọi thẻ trong tệp html, đây là lệnh dành cho bạn:

“: Start” được gọi là một nhãn. Nó giống như một thẻ trong script mà chúng ta muốn quay lại sau để áp dụng nhiều thay đổi cho cùng một dòng. sed tìm kiếm bất kỳ thứ gì có dạng “” (regex <[^>]*>) và thay thế nó bằng không, vì vậy thẻ html đầu tiên của dòng sẽ bị xóa. Nhưng sau đó, trước khi chuyển sang dòng tiếp theo, nó sẽ kiểm tra xem có thứ gì khác bắt đầu bằng “<" hay không, và nếu có, nó sẽ quay trở lại nhãn ": start" và áp dụng lại cách xử lý.

Sự kết luận

Bây giờ bạn đã sẵn sàng để nghiên cứu sâu hơn về sed, hoặc chỉ sử dụng nó để sửa đổi đơn giản. Đó là một lệnh mà tôi thấy đặc biệt hữu ích trong các tập lệnh nói chung, nhưng tôi đã mất một thời gian để hiểu cú pháp của nó. Tôi hy vọng nó sẽ nhanh hơn nhiều cho bạn.

Bạn có biết một lệnh cơ bản khác cho sed không? Hay bạn sử dụng một tập lệnh nâng cao khác liên quan đến sed mà bạn muốn chia sẻ? Xin vui lòng cho chúng tôi biết trong các ý kiến.

Bài viết này có hữu ích không?

Previous articleHướng dẫn cho người mới bắt đầu về Podman Containers trên Linux
Next articleHướng dẫn cho Người mới bắt đầu về Sketchbook Express