Theo trang tiêu chuẩn POSIX trênsed :
Kịch bản sẽ bao gồm các lệnh chỉnh sửa có dạng sau:
chức năng [ địa chỉ [, địa chỉ ]]
trong đó functionđại diện cho một động từ lệnh một ký tự từ danh sách trong
Chỉnh sửa lệnh trong sed , theo sau là bất kỳ đối số áp dụng nào.
Vì vậy, ký tự không trống đầu tiên sau địa chỉ được lấy làm động từ lệnh - trong trường hợp cụ thể của bạn, /do đó, đó là lỗi : char 9: unknown command: '/'.
Niềng răng được tham khảo thêm xuống:
[ 2addr ] { chỉnh sửa lệnh
chỉnh sửa lệnh
...
}
Thực hiện một danh sách các lệnh chỉnh sửa `sed` chỉ khi không gian mẫu được chọn. Giáo dục
[ 2addr ] là một chỉ báo cho thấy số lượng địa chỉ cho phép tối đa là hai.
Để làm rõ một điểm thực hiện ở trên, các địa chỉ phần của sed(1)nói:
Sedcác lệnh có thể được cung cấp mà không có địa chỉ, trong trường hợp đó lệnh sẽ được thực thi cho tất cả các dòng đầu vào; với một địa chỉ, trong trường hợp đó, lệnh sẽ chỉ được thực thi cho các dòng đầu vào khớp với địa chỉ đó; hoặc với hai địa chỉ, trong trường hợp đó, lệnh sẽ được thực thi cho tất cả các dòng đầu vào khớp với phạm vi bao gồm của các dòng bắt đầu từ địa chỉ đầu tiên và tiếp tục đến địa chỉ thứ hai. Ba điều cần lưu ý về phạm vi địa chỉ: cú pháp là addr1 , addr2 (nghĩa là các địa chỉ được phân tách bằng dấu phẩy);
... (và các công cụ khác không liên quan đến cuộc thảo luận này) ...
Các trang thông tin gnu ( info sed) có một mô tả tương tự {và }, dưới "3.4 Các lệnh thường dùng":
{ THÔNG TIN }
Một nhóm các lệnh có thể được đặt giữa {và các }ký tự. Điều này đặc biệt hữu ích khi bạn muốn một nhóm lệnh được kích hoạt bởi một địa chỉ (hoặc phạm vi địa chỉ) phù hợp.
Nói cách khác, dấu ngoặc nhọn được sử dụng để áp dụng nhiều lệnh tại cùng một địa chỉ hoặc cho các địa chỉ lồng.
Tiêu chuẩn không rõ ràng ở đây 1 nhưng nẹp trái { thực sự là một lệnh bắt đầu một nhóm các lệnh sed khác (nhóm kết thúc bằng một dấu ngoặc phải }).
Và, tại nguy cơ thực sự xảy ra TL; DR , vấn đề là 195, 210và /add/là tất cả các địa chỉ . Không có sedlệnh nào có thể được gọi với ba địa chỉ. Vì vậy, cách để làm cho lệnh của bạn hoạt động là gọi {lệnh trên phạm vi địa chỉ 195,210, và sau đó (trong phạm vi đó) gọi plệnh trên địa chỉ /add/.
1:
mặc dù nếu bạn đọc toàn bộ trang, nó được đề cập rằng: Các
động từ lệnh khác với { , a , b , c , i , r , t , w , : , và # có thể được theo sau bởi ...
sed -n '195,210s/old/new/p' <file>hoạt động tốt. Liên kết đến tiêu chuẩn POSIX cũng hữu ích.