Làm thế nào tôi có thể phù hợp với khoảng trắng trong sed? Trong dữ liệu của tôi, tôi muốn khớp tất cả hơn 3 ký tự khoảng trắng tiếp theo (không gian tab) và thay thế chúng bằng 2 khoảng trắng. Điều này có thể giải quyết như thế nào?
Làm thế nào tôi có thể phù hợp với khoảng trắng trong sed? Trong dữ liệu của tôi, tôi muốn khớp tất cả hơn 3 ký tự khoảng trắng tiếp theo (không gian tab) và thay thế chúng bằng 2 khoảng trắng. Điều này có thể giải quyết như thế nào?
Câu trả lời:
Lớp nhân vật \s
sẽ phù hợp với các ký tự khoảng trắng <tab>
và <space>
.
Ví dụ:
$ sed -e "s/\s\{3,\}/ /g" inputFile
sẽ thay thế mọi chuỗi của ít nhất 3 khoảng trắng bằng hai khoảng trắng.
LƯU Ý : Để tuân thủ POSIX, hãy sử dụng lớp ký tự [[:space:]]
thay vì \s
, vì lớp sau là phần mở rộng GNU sed. Xem thông số kỹ thuật POSIX cho sed và BREs
sed
tôi phải sử dụng [[:space:]]
vì \s
không làm việc cho tôi. Có lẽ \s
là một phần mở rộng GNU sed ?
[[:space:]
người ta có thể sử dụng [[:blank:]]
chỉ khớp với các tab ngang và dấu cách (nhưng không có dòng mới, tab dọc, v.v.).
Điều này hoạt động trên MacOS 10.8:
sed -E "s/[[:space:]]+/ /g"
sed "s/[[:space:]]\+/ /g"
khớp một hoặc nhiều khoảng trắng.
-E
cờ.
Một số phiên bản cũ hơn của sed có thể không nhận ra \ là mã thông báo khớp với khoảng trắng. Trong trường hợp đó, bạn có thể khớp một chuỗi gồm một hoặc nhiều khoảng trắng và tab với '[XZ] [XZ] *' trong đó X là khoảng trắng và Z là tab.
sed 's/[ \t]*/"space or tab"/'
sed
trên bất kỳ hệ thống nào không? Nếu không, có thể đáng để đề cập đến nơi điều này hoạt động theo cách tương tự như các câu trả lời khác, chỉ để chúng tôi biết những hạn chế và nơi mà điều này có thể không có kết quả như mong muốn.