Câu trả lời:
Trong tiếng Anh, sed
chương trình này có nghĩa là: cho mỗi dòng,
123!
] nếu số dòng hiện tại không phải là 123, thì [ d
] xóa dòng hiện tại và bắt đầu chu kỳ tiếp theo (tức là chuyển sang dòng tiếp theo);d
lệnh không được thực thi), [ q
] thoát mà không xử lý thêm bất kỳ dòng nào (nhưng in ra dòng hiện tại trong các đoạn chết của chúng tôi).Hoặc nếu bạn thích, theo cú pháp shell:
line_number=0
while IFS= read -r pattern_space; do
line_number=$(($line_number+1))
if [ $line_number -ne 123 ]; then # 123!
continue # d
fi
echo "$pattern_space"; break # q
echo "$pattern_space" # implicit final print (never reached)
done
{d;q;}
, không nên q
áp dụng cho mọi dòng (vì vậy chỉ đầu tiên)?
q
áp dụng cho mọi dòng nơi nó được thực thi. Nhưng khi số dòng không phải là 123, d
lệnh được thực thi và ý nghĩa của nó là bỏ qua ngay lập tức đến dòng đầu vào tiếp theo.
sed -n 123p
(in cùng một đầu ra) ngoại trừ nó dừng sau dòng 123 thay vì xử lý hàng nghìn dòng có khả năng mà nó sẽ không bao giờ làm bất cứ điều gì với bất kỳ cách nào.
!
là đã kết nốid
, không phải123
.