حاولت التعليمة البرمجية التالية ليحل محل QQ مع ZZ، لكنه لا يفعل ما أريد:
var1=QQsed -i 's/$var1/ZZ/g' $fileومع ذلك ، هذا الرمز يفعل ما أريد:
sed -i 's/QQ/ZZ/g' $fileكيف يمكنني استخدام المتغيرات في sed?
حاولت التعليمة البرمجية التالية ليحل محل QQ مع ZZ، لكنه لا يفعل ما أريد:
var1=QQsed -i 's/$var1/ZZ/g' $fileومع ذلك ، هذا الرمز يفعل ما أريد:
sed -i 's/QQ/ZZ/g' $fileكيف يمكنني استخدام المتغيرات في sed?
القشرة مسؤولة عن توسيع المتغيرات. عند استخدام علامات الاقتباس المفردة للسلاسل ، سيتم التعامل مع محتوياته حرفيا، لذلك sed الآن يحاول أن يحل محل كل حدوث الحرفي $var1 بواسطة ZZ.
استخدام علامات الاقتباس المزدوجة لجعل قذيفة توسيع المتغيرات مع الحفاظ على مسافة بيضاء:
sed -i "s/$var1/ZZ/g" "$file"عندما تحتاج إلى حرف الاقتباس في سلسلة الاستبدال ، عليك أن تسبقه بشرطة مائلة للخلف والتي سيتم تفسيرها بواسطة الصدفة. في المثال التالي ، السلسلة quote me سيتم استبداله بـ "quote me" (الشخصية & يتم تفسيره بواسطة sed):
sed -i "s/quote me/\"&\"/" "$file"إذا كان لديك الكثير من الأحرف الوصفية ، ففكر في استخدام علامات اقتباس مفردة للنمط ، وعلامات اقتباس مزدوجة للمتغير:
sed -i 's,'"$pattern"',Say hurrah to &: \0/,' "$file"لاحظ كيف يمكنني استخدام s,pattern,replacement, بدلا من s/pattern/replacement/، فعلت ذلك لتجنب التدخل في / في \0/.
ثم تقوم القشرة بتشغيل الأمر أعلاه sed مع الحجج التالية (على افتراض pattern=bert و file=text.txt):
-is,bert,Say hurrah to &: \0/,text.txtإذا file.txt يحتوي على bert، سيكون الإخراج:
Say hurrah to bert: \0/
يمكننا استخدام المتغيرات في sed استخدام علامات الاقتباس المزدوجة:
sed -i "s/$var/r_str/g" file_nameإذا كان لديك شرطة مائلة / في المتغير ثم استخدام فاصل مختلفة ، مثل أدناه:
sed -i "s|$var|r_str|g" file_name
لتوسيع (يقصد التورية) على @جواب ماني,
perl
| قد تظهر في قيمة المتغير الخاص بك أيضا، لذلك لا تخف من تجربة المحددات الأخرى