حاولت التعليمة البرمجية التالية ليحل محل 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
|
قد تظهر في قيمة المتغير الخاص بك أيضا، لذلك لا تخف من تجربة المحددات الأخرى