Không những gì #
nhân vật có nghĩa là trong dòng này:
/bin/sed -e 's#abc#zzz#g'
Không những gì #
nhân vật có nghĩa là trong dòng này:
/bin/sed -e 's#abc#zzz#g'
Câu trả lời:
Đó là một dấu phân cách, giống như "/"
, nó giống như 's/abc/zzz/g'
.
nó có nghĩa là tìm kiếm "abc" thay thế nó bằng "zzz", với cờ toàn cầu, nghĩa là thực hiện nó cho tất cả các "abc" trên dòng, không chỉ cái đầu tiên.
Bạn cũng có thể sử dụng một dấu phân cách thay thế cho một địa chỉ mẫu, nhưng trong trường hợp đó, bạn cần thoát nó để được giải thích chính xác:
sed -r '\#abc#p'
Đó là một dấu phân cách hoặc dấu phân cách. Một thường được sử dụng là /
như trong
sed 's/old/new/' file
Nhưng sed sẽ lấy ký tự đầu tiên sau (các) lệnh làm dấu phân cách. Bạn có thể sử dụng bất kỳ ký tự thuận tiện, ví dụ ...
sed 's%old%new%' file
Điều này rất hữu ích nếu tệp chứa /
(hoặc các ký tự phân cách thông thường khác). Bạn có thể chọn làm dấu phân cách một số ký tự mà bạn biết bạn sẽ không cần đưa vào sed
biểu hiện của mình , tiết kiệm cho bạn rất nhiều lối thoát khó chịu.
Giả sử bạn muốn thay thế
/ubuntu//questions
với
/ubuntu//posts
Bạn đã có thể sử dụng
sed 's/https:\/\/askubuntu.com\/questions/https:\/\/askubuntu.com\/posts/' file
Nhưng tốt hơn để sử dụng
sed 's|/ubuntu//questions|/ubuntu//posts|' file
sbabeb
không giống như s/a/e/
.
/
có thể được thay thế bằng một ký tự thay thế trong các ngữ cảnh khác với lệnhs
(thay thế) - nhưng trong trường hợp đó, nó cần phải được thoát lần đầu tiên, ví dụ:sed '/foo/d'
(xóa các dòng khớpfoo
) trở thànhsed '\#foo#d'