Công cụ tốt nhất để chỉnh sửa tập tin tại chỗ không tương tác là ex
.
ex -sc '%s/\(\.com\).*/\1/ | x' file.txt
Nếu bạn đã sử dụng vi
và nếu bạn đã từng gõ một lệnh bắt đầu bằng dấu hai chấm, :
bạn đã sử dụng lệnh ex. Tất nhiên, nhiều lệnh nâng cao hoặc "ưa thích" hơn mà bạn có thể thực hiện theo cách này là các tiện ích mở rộng Vim (ví dụ :bufdo
) và không được xác định trong thông số kỹ thuật POSIXex
, nhưng các thông số kỹ thuật đó cho phép mức độ đáng kinh ngạc và linh hoạt trong khả năng phi thị giác chỉnh sửa văn bản (cho dù tương tác hay tự động).
Lệnh trên có một số phần.
-s
cho phép chế độ im lặng để chuẩn bị ex
sử dụng hàng loạt. (Bỏ thông điệp đầu ra et. Al.)
-c
chỉ định lệnh để thực thi khi tệp ( file.txt
trong trường hợp này) được mở trong bộ đệm.
%
là một công cụ xác định địa chỉ tương đương 1,$
vớiMitit có nghĩa là lệnh sau được áp dụng cho tất cả các dòng của bộ đệm.
s
là lệnh thay thế mà bạn có thể đã quen thuộc với. Nó thường được sử dụng trong vi
và có các tính năng cơ bản giống hệt với s
lệnh củased
, mặc dù một số tính năng regex nâng cao có thể thay đổi khi thực hiện. Trong trường hợp này, từ ".com" đến cuối dòng được thay thế bằng ".com".
Thanh dọc ngăn cách các lệnh tuần tự được thực hiện. Trong nhiều (hầu hết) ex
triển khai, bạn cũng có thể sử dụng một -c
tùy chọn bổ sung , như vậy:
ex -sc '%s/\(\.com\).*/\1/' -c x file.txt
Tuy nhiên, điều này không bắt buộc bởi POSIX.
Các x
lối ra lệnh, sau khi viết bất kỳ thay đổi đối với tập tin. Không giống như wq
có nghĩa là "ghi và thoát", x
chỉ ghi vào tệp nếu bộ đệm đã được chỉnh sửa. Do đó, nếu tệp của bạn không được thay đổi, dấu thời gian sẽ được giữ nguyên.
.com
chỉ thay vì loại bỏ mọi thứ sau và bao gồm cả/
ký tự đầu tiên ? Điều gì nếu bạn có một URL nhưen.wikipedia.org/wiki/Ubuntu
trong danh sách của bạn?