ผมอยากจะเข้ามาแทนที่$fileWithPath
ใน$file
อย่างไรก็ตามเรื่องนี้ไม่ได้เพราะ (ฉันคิด) เส้นทางไม่ได้หนี วิธีการหนี
sed -i 's/${fileWithPath}/HAHA/g' $file
ผมอยากจะเข้ามาแทนที่$fileWithPath
ใน$file
อย่างไรก็ตามเรื่องนี้ไม่ได้เพราะ (ฉันคิด) เส้นทางไม่ได้หนี วิธีการหนี
sed -i 's/${fileWithPath}/HAHA/g' $file
คำตอบ:
sed -i 's|'$fileWithPath'|HAHA|g' file
เครื่องหมายคำพูดเดี่ยวกำหนดสตริงตัวอักษร การวางตัวแปรนอกตัวอักษรทำให้เชลล์สามารถขยายส่วนนั้นได้
นอกจากนี้หากคุณกำลังจะแยกวิเคราะห์เส้นทางให้ใช้ตัวคั่นในคำสั่ง sed ที่ไม่สับสนกับตัวคั่นไดเรกทอรี "/"
sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpn
ดูเหมือนจะใช้ได้
วิธีที่ดีกว่าสำหรับสตริงตัวอักษรที่มีเครื่องหมายสแลช:
sed -i "s|my/path|my/other/path|g" myFileOfPaths.txt
ในสถานการณ์ที่สตริงการแทนที่หรือสตริงรูปแบบมีสแลชคุณสามารถใช้ประโยชน์จากความจริงที่ว่า GNU sed อนุญาตให้ตัวคั่นทางเลือกสำหรับคำสั่งทดแทน ตัวเลือกทั่วไปสำหรับตัวคั่นคือไพพ์อักขระ| หรือ hash # - ตัวเลือกที่ดีที่สุดของการกำหนดอักขระมักขึ้นอยู่กับประเภทของไฟล์ที่กำลังประมวลผล ในกรณีของคุณคุณสามารถลอง
sed -i 's#'$fileWithPath'#HAHA#g' $file
อักขระ 'g' หลังจาก#สุดท้ายถูกใช้เพื่อเปลี่ยนการเกิดขึ้นทั้งหมดในไฟล์หากคุณต้องการเปลี่ยนเฉพาะการปรากฏครั้งแรกเท่านั้นจากนั้นจึงลบ 'g'
$fileWithPath
มีช่องว่างรูปแบบที่ผิดจะถูกแทรก