Tôi đã cố gắng sau mã để thay thế QQ với ZZ nhưng nó không làm những gì tôi muốn:
var1=QQsed -i 's/$var1/ZZ/g' $fileTuy nhiên, điều này mã làm những gì tôi muốn:
sed -i 's/QQ/ZZ/g' $fileLàm thế nào để tôi sử dụng biến trong sed?
Tôi đã cố gắng sau mã để thay thế QQ với ZZ nhưng nó không làm những gì tôi muốn:
var1=QQsed -i 's/$var1/ZZ/g' $fileTuy nhiên, điều này mã làm những gì tôi muốn:
sed -i 's/QQ/ZZ/g' $fileLàm thế nào để tôi sử dụng biến trong sed?
Vỏ là trách nhiệm cho việc mở rộng biến. Khi bạn sử dụng duy nhất báo cho dây, nội dung của nó sẽ được đối xử theo nghĩa đen, do đó, sed bây giờ cố gắng để thay thế mỗi lần xuất hiện của các chữ $var1 bởi ZZ.
Sử dụng đôi giá để tạo vỏ mở rộng biến trong khi vẫn giữ khoảng trắng:
sed -i "s/$var1/ZZ/g" "$file"Khi bạn yêu cầu các báo nhân vật trong việc thay thế chuỗi, anh phải đi trước khi nó với một xổ sau đó sẽ được giải thích bởi vỏ. Trong ví dụ sau, các chuỗi quote me sẽ được thay thế bởi "quote me" (nhân vật & được giải thích bởi sed):
sed -i "s/quote me/\"&\"/" "$file"Nếu đã rất nhiều vỏ siêu nhân vật xem xét sử dụng duy nhất báo cho các mẫu, và tăng gấp đôi giá cho sự biến:
sed -i 's,'"$pattern"',Say hurrah to &: \0/,' "$file"Thông báo làm thế nào tôi sử dụng s,pattern,replacement, thay vì s/pattern/replacement/ Tôi đã làm nó để tránh sự can thiệp với những / trong \0/.
Vỏ sau đó chạy trên lệnh sed với sự tiếp theo lý luận (giả sử pattern=bert và file=text.txt):
-is,bert,Say hurrah to &: \0/,text.txtNếu file.txt chứa bert đầu ra sẽ được:
Say hurrah to bert: \0/
Chúng ta có thể sử dụng biến trong sed sử dụng đôi trích:
sed -i "s/$var/r_str/g" file_nameNếu bạn có một chém / trong biến sau đó, sử dụng tách khác nhau, như dưới đây,:
sed -i "s|$var|r_str|g" file_name
Để mở rộng (chơi chữ dự định) trên @huy của câu trả lời,
perl
| có thể xuất hiện trong biến của bạn là giá trị là tốt, vì vậy không được sợ hãi để thử cách khác