Trong chỉnh sửa
này, Stéphane Chazelas POSIXifying (một lần nữa)sed
định dạng của tôi bằng cách chèn dấu -e
ngắt xpression và một -e
câu lệnh xpression khác . Bây giờ, tôi có thể hỏi anh ấy tại sao trong các bình luận, tôi cho rằng, nhưng nó đã được sửa đổi số 18 trong câu trả lời đó và hầu hết tất cả những câu hỏi trước đều nhờ vào các phần mềm miễn phí tương tự (nếu bạn có thể thấy các bình luận đã xóa, bạn sẽ biết gì Ý tôi là) . Ngoài ra, tôi nghĩ rằng tôi gần đủ để hiểu tại sao phải diễn đạt điều này theo cách có thể hữu ích hơn. Vì vậy, đây là hy vọng ...
Tôi thường thích giữ tổng số lần nhấn của mình sed
-e
thành một nếu tôi có thể, nhưng tôi cũng có một ưu tiên lớn hơn cho việc tuân thủ thông số kỹ thuật gần nhất có thể, đặc biệt là khi chênh lệch lên tới không quá a <space>
và an -e
. Nhưng tôi không thể làm điều này nếu tôi không hiểu tại sao tôi nên làm vậy. Đây là một tóm tắt ngắn gọn về tình trạng hiện tại của sự hiểu biết của tôi:
sự
' -e '
phá vỡ có thể thay thế cho sự phá vỡ ewlinesed
script\n
trong mộtsed
lệnh dòng lệnh ... Tôi thừa nhận mờ nhạt về lý do tại saocú đúp kết thúc trong một
sed
{
chức năng}
phải được đi trước bởi một\n
ngắt ewline như đã nêu ở đây:- Điều này
<right-brace>
sẽ được đi trước bởi một<newline>
và có thể được đi trước hoặc theo sau bởi<blank>
ký tự.
- Điều này
một
\n
đột phá ewline được tương tự cần thiết sau bất kỳ sử dụng ...a
,b
,c
,i
,r
,t
,w
, hoặc:
.
Nhưng tôi không hiểu rõ định nghĩa {
hàm }
liên quan đến !
toán tử không như thế nào . Các đề cập duy nhất tôi tìm thấy của toán tử phủ định trong các trạng thái cụ thể:
- Một chức năng có thể được đi trước bởi một hoặc nhiều
!
ký tự, trong trường hợp đó, chức năng sẽ được áp dụng nếu địa chỉ không chọn không gian mẫu.
Điều này có nghĩa là việc sử dụng một !
hàm {
niềng răng }
? Những gì của $!
lệnh - chúng nên được phân tách bằng' -e '
ngắt không? Đây có phải là những gì đã được giải quyết khi Stéphane gần đây nhất là POSIXified câu trả lời của tôi?
Tôi nghĩ đó là !
toán tử phủ định hoặc đó là b
câu lệnh trang trại mà anh ấy xử lý trong bản chỉnh sửa của mình - hoặc có thể là cả hai cùng một lúc - nhưng tôi không biết và nên thích. Nếu đó là chỉ những b
tuyên bố trang trại, sau đó tôi tin rằng một d
sẽ làm ở chỗ của nó và loại bỏ sự cần thiết của các ' -e '
giờ nghỉ, nhưng tôi thà nhất định trước khi hazarding một ba lần POSIXified câu trả lời. Bạn có thể giúp?
Tôi đã có nguy cơ nó sau khi tất cả , nhưng không phải với bất kỳ sự chắc chắn tuyệt vời ...
:
một phần - bạn đã lái xe về nhà cách đây nhiều tháng. Nhưng tôi không hoàn toàn hiểu tại sao sed
lệnh thứ hai tương tự POSIXified .
sed
tôi rất không rõ ràng. Tôi đã yêu cầu làm rõ một vài lần trong quá khứ, nhưng tôi không nghĩ rằng nó đã được cập nhật. Một thử nghiệm tốt là thử với công cụ gia truyền (Solaris, có nguồn gốc từ bản gốc và thông số kỹ thuật POSIX chủ yếu dựa vào).
s///
ubstitutions được chấp nhận xâu chuỗi với a ; . nó bị mờ xung quanh các lệnh phải được phân định bằng một dòng mới và làm thế nào -e
có thể đứng trong trường hợp đó - ít nhất là đối với tôi. Tôi đã không vấp ngã trên một sed
điều mà không giải thích chúng khá thay thế cho nhau.
;
trước một dòng mới - một dòng mới là tốt. Thành thật mà nói, bạn có thể làm mà không cần -e
và hoàn toàn và chỉ viết một tệp như #!/bin/sed
với mỗi lệnh trên một dòng mới - hoặc những lệnh không yêu cầu các dấu phân cách như vậy thay vào đó được phân định bằng ;
. Những người làm đòi hỏi dòng mới thường là những người đi đầu vào tùy ý - :
tên nhãn và lệnh giới thiệu cho họ như b
hoặc t
hoặc đóng }
curlies cho các chức năng, hoặc r
ead và w
nghi thức mà mất args filename. Tất cả đều cần phải được theo sau \n
.
b;n;:b
, bạn đang phân nhánh nhãn được gọi";n;:b"
trong seds POSIX và lịch sử (và GNU sed không liên quan đến điều đó).