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' $file
Tuy nhiên, điều này mã làm những gì tôi muốn:
sed -i 's/QQ/ZZ/g' $file
Là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' $file
Tuy nhiên, điều này mã làm những gì tôi muốn:
sed -i 's/QQ/ZZ/g' $file
Là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.txt
Nế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_name
Nế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