Tôi muốn thay thế $fileWithPath
trong $file
, tuy nhiên điều này không làm việc vì (tôi nghĩ) đường dẫn không trốn thoát. Làm thế nào để thoát khỏi nó?
sed -i 's/${fileWithPath}/HAHA/g' $file
Tôi muốn thay thế $fileWithPath
trong $file
, tuy nhiên điều này không làm việc vì (tôi nghĩ) đường dẫn không trốn thoát. Làm thế nào để thoát khỏi nó?
sed -i 's/${fileWithPath}/HAHA/g' $file
Câu trả lời:
sed -i 's|'$fileWithPath'|HAHA|g' file
Dấu ngoặc đơn xác định một chuỗi bằng chữ. Đặt biến bên ngoài nghĩa đen cho phép vỏ mở rộng phần đó.
Ngoài ra: nếu bạn định phân tích các đường dẫn, hãy sử dụng một dấu phân cách trong lệnh sed không gây nhầm lẫn với dấu phân cách thư mục "/".
sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpn
dường như làm việc.
Một cách tốt hơn cho các chuỗi chữ có dấu gạch chéo về phía trước:
sed -i "s|my/path|my/other/path|g" myFileOfPaths.txt
Trong trường hợp chuỗi thay thế hoặc chuỗi mẫu có dấu gạch chéo, bạn có thể sử dụng thực tế là GNU sed cho phép một dấu phân cách thay thế cho lệnh thay thế. Các lựa chọn phổ biến cho dấu phân cách là ký tự ống | hoặc hàm băm # - sự lựa chọn tốt nhất của ký tự phân định thường sẽ phụ thuộc vào loại tệp được xử lý. Trong trường hợp của bạn, bạn có thể thử
sed -i 's#'$fileWithPath'#HAHA#g' $file
Ký tự 'g' sau # cuối được sử dụng để thay đổi tất cả các lần xuất hiện trong tệp nếu bạn chỉ cần thay đổi lần xuất hiện đầu tiên sau đó xóa 'g'.
$fileWithPath
chứa khoảng trắng, mẫu sai được chèn vào.