سؤال

كيفية تطابق اقتبس واحدة في sed إذا كان التعبير داخل علامات الاقتباس المفردة:

sed -e '...'

على سبيل المثال يجب أن يتطابق هذا النص:

'foo'
هل كانت مفيدة؟

المحلول

يمكنك استخدام إما:

"texta'textb" (APOSTROPHE inside QUOTATION MARKs)

أو

'texta'\''textb' (APOSTROPHE text APOSTROPHE, then REVERSE SOLIDUS, APOSTROPHE, then APOSTROPHE more text APOSTROPHE)

أنا استخدم حرف unicode في أسماء.عكس SOLIDUS هو أكثر شيوعا المعروفة باسم مائل.

في هذه الحالة إغلاق الفاصلة ، ثم قذيفة الاقتباس الخاص بك الفاصلة مع خط مائل عكسي, ثم فتح آخر الفاصلة عن بقية النص.

نصائح أخرى

كما لوحظ في التعليقات على هذا السؤال ، انها ليست حقا عن sed ، ولكن كيفية إدراج اقتباس في سلسلة مقتبسة في قذيفة (مثلا ، باش).

لتوضيح الإجابة السابقة ، تحتاج إلى الهروب من الاقتباس مع خط مائل عكسي, ولكن لا يمكنك أن تفعل ذلك في غضون واحد-نقلا عن التعبير.من باش رجل الصفحة:

أرفق الشخصيات في واحد يقتبس يحافظ على القيمة الحرفية من كل حرف داخل الاقتباس.واحد اقتباس قد لا تحدث بين واحدة ونقلت حتى عندما يسبقه مائل.

ولذلك ، تحتاج إلى إنهاء نقلت التعبير ، كما هرب اقتباس و البدء من جديد نقلا عن التعبير.قذيفة اقتباس إزالة لا تضيف أي مسافات إضافية ، حتى في الواقع يمكنك الحصول على سلسلة سلسلة.

لذا للإجابة على السؤال الأصلي من كيفية اقتباس مفردة التعبير 'فو' ، كنت تفعل شيئا من هذا القبيل:

sed -e '...'\''foo'\''...'

(حيث '...' هو بقية sed التعبير).

عموما من أجل القراءة ستكون أفضل حالا بكثير المتغيرة المحيطة ونقلت إلى التنصيص إذا كان ذلك ممكنا:

sed -e "...'foo'..."

[كمثال على إمكانية الصيانة كابوس الأولى (اقتباس مفردة) نهج لاحظ كيف ستاكوفيرفلوو هو تسليط الضوء على الألوان ونقلت الخطوط المائلة العكسية وغيرها من النصوص-انها بالتأكيد ليست صحيحة.]

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top