Giải thích ~ trong sed


9

Tôi đang học sed ngày nay. Có dấu ngã này '~' làm tôi bối rối hơn bất cứ điều gì.

Ví dụ, lệnh

sed -n '1~2 w output.txt' input.txt

đang in các dòng được đánh số lẻ (thành tệp output.txt).

Trong cùng một hướng dẫn, người ta cũng cho rằng nó bỏ qua các dòng từ 1 đến 2 và sau đó nó bắt đầu in các dòng bên cạnh dòng số 2 trong trường hợp chúng ta sử dụng

sed -n '1~2 p' input.txt

Giải thích tuyệt đối của dấu ngã này là gì?


Chính xác thì hướng dẫn nói gì cho ví dụ thứ hai? "bỏ qua các dòng từ 1 đến 2" không phải là một mô tả chính xác về những gì lệnh đó làm.
JigglyNaga

Câu trả lời:


13

Đây là một sedphần mở rộng GNU :

first~step

Khớp mọi stepdòng thứ bắt đầu bằng dòng first. Ví dụ: sed -n 1~2psẽ in tất cả các dòng được đánh số lẻ trong luồng đầu vào và địa chỉ 2~5sẽ khớp với mỗi dòng thứ năm, bắt đầu bằng dòng thứ hai. firstcó thể bằng không; trong trường hợp này, sedhoạt động như thể nó bằng step. (Đây là một phần mở rộng.)

Hai ví dụ của bạn khớp với cùng một dòng, nhưng lần đầu tiên ghi ( w) chúng vào một tệp trong khi ví dụ thứ hai in ( p) chúng đến bất cứ nơi nào có đầu ra tiêu chuẩn.

Nói chung, luôn luôn tham khảo hướng dẫn của lệnh. Hướng dẫn ít khi mơ hồ. Việc áp dụng lệnh bằng cách kết hợp một số khía cạnh của chức năng của nó đôi khi có thể khó giải thích trong hướng dẫn (và đôi khi một hướng dẫn cố gắng làm cho mọi thứ dễ hiểu hơn bằng cách viết lại cùng một câu theo nhiều cách, có thể dẫn đến nhầm lẫn), nhưng hướng dẫn là tham chiếu xác định cho mỗi bit của lệnh tổng hợp làm gì.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.