Điều này đảo ngược dòng tập tin theo dòng.
sed '1 G;! h;! $ d' tập tin
Đầu tiên, sed
có một không gian giữ và một không gian mô hình . Chúng ta phải phân biệt giữa chúng trước khi tập trung vào lệnh cụ thể đó.
Khi sed
đọc một dòng mới, nó được tải vào không gian mẫu. Do đó, không gian đó được ghi đè mỗi khi một dòng mới được xử lý. Mặt khác, không gian giữ nhất quán trong toàn bộ quá trình xử lý và các giá trị có thể được lưu trữ ở đó để sử dụng sau này.
Theo lệnh:
Có 3 lệnh trong bản Tuyên Bố này: 1!G
, h
và$!d
1!G
có nghĩa là G
lệnh được thực thi trên mỗi dòng trừ dòng đầu tiên ( !
phủ định 1
). G
có nghĩa là nối thêm những gì trong không gian giữ vào không gian mẫu.
h
áp dụng cho mọi dòng. Nó sao chép không gian mẫu vào không gian giữ (và ghi đè lên nó).
$!d
áp dụng cho mọi dòng trừ dòng cuối cùng ( $
đại diện cho dòng cuối cùng, !
phủ nhận nó). d
là lệnh xóa dòng (không gian mẫu).
- Bây giờ, khi dòng đầu tiên được đọc,
sed
thực thi h
lệnh. Dòng đầu tiên được sao chép vào không gian giữ. Sau đó, nó sẽ bị xóa, vì nó phù hợp với $!
điều kiện. sed
tiếp tục với dòng thứ hai.
- Dòng thứ hai khớp với điều kiện
1!
(không phải là dòng đầu tiên) và do đó, không gian giữ (có dòng đầu tiên) được thêm vào không gian mẫu (có dòng thứ hai). Sau đó, trong không gian mẫu, bây giờ có dòng thứ hai theo sau là dòng đầu tiên, được phân định bởi một dòng mới. Bây giờ, h
lệnh áp dụng (như trong mỗi dòng); tất cả những gì trong không gian mẫu được sao chép vào không gian giữ. Câu lệnh thứ ba ( $!d
) được áp dụng: Dòng bị xóa khỏi không gian mẫu.
- Bước 2 bây giờ được thực hiện với tất cả các dòng. Chúng tôi bỏ qua đến dòng cuối cùng.
- Trong dòng cuối cùng (
$
) gần như tất cả Bước 2 đã hoàn thành, nhưng không phải là phần xóa ( d
). sed
, khi được gọi mà không có -n
, sẽ tự động in không gian mẫu ở cuối quá trình xử lý cho mỗi dòng đầu vào. Vì vậy, khi không bị xóa, không gian mẫu được in. Nó chứa tất cả các dòng theo thứ tự đảo ngược .