Tôi đã đọc tất cả các câu hỏi tương tự về chủ đề này, nhưng không tìm thấy câu hỏi phù hợp với những gì tôi đang gặp phải. Tôi xin lỗi nếu điều này đã được trả lời rồi.sed không hoạt động từ bên trong tập lệnh bash
Bên trong một tập lệnh bash tôi đã viết, có một lệnh sed rất đơn giản, có vẻ như không hoạt động. Không có lỗi và lệnh hoạt động hoàn hảo khi chạy từ dòng lệnh.
Trong đầu ra từ bộ -x, tôi có thể thấy lệnh sed thực thi hoàn hảo.
GNU bash, phiên bản 4.3.11 (1) -release (x86_64-pc-linux-gnu)
Bash kịch bản: (giảm bớt cho sự hiểu biết dễ dàng hơn)
#!/bin/bash -x
# This script has the exact same sed command as used on cli
contact='"[email protected]"'
sed -i "/$contact/d" /home/tim/Desktop/file.txt
exit
Shell đầu ra:
[email protected]:~/Desktop$ cat file.txt
t,b,[email protected]
[email protected]:~/Desktop$ ./test.sh
+ contact='"[email protected]"'
+ sed -i '/"[email protected]"/d' /home/tim/Desktop/file.txt
+ exit
[email protected]:~/Desktop$ cat file.txt
t,b,[email protected]
[email protected]:~/Desktop$ sed -i "/"[email protected]"/d" /home/tim/Desktop/file.txt
[email protected]:~/Desktop$ cat file.txt
[email protected]:~/Desktop$
Tôi cho rằng tôi đang thiếu một điều gì đó rất rõ ràng, nhưng tôi đã nhìn chằm chằm vào nó hy vọng câu trả lời sẽ nhảy ra khỏi màn hình và tát vào mặt tôi. Xin giúp :-)
Tim
Tại sao bạn có 2 dấu ngoặc kép trong 'contact = '" [email protected] "''. Nó chỉ nên là: 'contact = 'tim @ email.com'' – anubhava
Lệnh của bạn là _not_ giống hệt nhau: bên trong kịch bản bạn gửi kèm theo mẫu khớp với dấu nháy đơn, trên cli với các dấu ngoặc kép. Điều đó có nghĩa là, sed được gọi từ tập lệnh bash của bạn khớp với địa chỉ email được đính kèm trong dấu ngoặc kép, mà nó không có trong tệp của bạn. – collapsar
@anubhava Xin lỗi, tôi nên đoán ai đó sẽ hỏi điều đó. Trong kịch bản dumbed xuống có vẻ như vô nghĩa, nhưng trong kịch bản thực tế có một chuỗi giải mã base64, sau đó openssl giải mã và trở thành biến số liên lạc $, và được trích dẫn. Tôi không muốn cố gắng loại bỏ các dấu ngoặc kép vì biến được sử dụng trong nhiều hàm khác mà sau đó sẽ phải được viết lại. Dù bằng cách nào, nó hoạt động trên dòng lệnh với dấu ngoặc kép. – asimovwasright