أكثر

البحث عن البرنامج النصي للملف المشكل واستبداله لا يعمل

البحث عن البرنامج النصي للملف المشكل واستبداله لا يعمل


أنا جديد جدًا في لعبة بيثون ، لذا يرجى أن تسامحني إذا كان هذا خطأ بسيطًا. لدي عدد غير قليل من أجهزة MXD التي تحتوي كل منها على طبقات قليلة تشير إلى نفس المصدر. ومع ذلك فقد قمت منذ ذلك الحين بنقل هذه البيانات إلى مجلد جديد. لقد كتبت نصًا لتحديث الطبقات المتشابهة تلقائيًا.

يتم تشغيل البرنامج النصي ، ولكن عندما أتحقق من نجاحه ، لم يتم تحديث أي من الطبقات. لست متأكدا ما هو الخطأ.

import arcpy، os # workspace للبحث عن MXDs Workspace = r "M:  TEAM_GIS  EDKM  Projects  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  MXD" arcpy.env.workspace = مجلدات خريطة مساحة العمل #. "* .mxd") اطبع mxdList #set ارتباط جديد لملف شكل معين في كل MXD في القائمة. للملف في mxdList: # اضبط مستند الخريطة لتغيير filePath = os.path.join (مساحة العمل ، ملف) mxd = arcpy.mapping.MapDocument (filePath) لـ lyr في arcpy.mapping.ListLayers (mxd): if lyr.supports ( "DATASOURCE"): if lyr.dataSource == r "M:  TEAM_GIS  EDKM  Projects  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  WP1  MMO_South_Plan_Areas.shp": lReplace  Project mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  WP1 "ص" M:  TEAM_GIS  EDKM  مشاريع  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  SHP ") إذا lyr.dataSource == ص" M:  TEAM_GIS  EDKM  مشاريع  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  WP1  Land.shp ": lyr.findAndReplaceWorkspacePath (ص" M:  TEAM_GIS  EDKM  مشاريع  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  WP1 "ص" M:  TEAM_GIS  EDKM  مشاريع  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  SHP ") arcpy.RefreshTOC () arcpy. RefreshActiveView () mxd.save () اطبع "نجاح"

كما علقLuke ، وبما أننا كنا نعمل على تحقيق ما يلي:

إذا كان هذا هو الكود الفعلي الخاص بك ، فسيتم تشغيل الحلقة الخاصة بـ lyr في arcpy.mapping.ListLayers (mxd): حلقة فقط على mxd النهائي حيث لم يتم وضع مسافة بادئة لتكون داخل ملف for في mxdList: loop.

بدلاً من التعليمات البرمجية الخاصة بك ، حاول:

import arcpy، os # workspace للبحث عن MXDs Workspace = r "M:  TEAM_GIS  EDKM  Projects  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  MXD" arcpy.env.workspace = مجلدات خريطة مساحة العمل #. "* .mxd") اطبع mxdList #set ارتباط جديد لملف شكل معين في كل MXD في القائمة. للملف في mxdList: # اضبط مستند الخريطة لتغيير filePath = os.path.join (مساحة العمل ، ملف) mxd = arcpy.mapping.MapDocument (filePath) لـ lyr في arcpy.mapping.ListLayers (mxd): if lyr.supports ( "DATASOURCE"): if lyr.dataSource == r "M:  TEAM_GIS  EDKM  Projects  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  WP1  MMO_South_Plan_Areas.shp": lReplace  Project mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  WP1 "ص" M:  TEAM_GIS  EDKM  مشاريع  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  SHP ") إذا lyr.dataSource == ص" M:  TEAM_GIS  EDKM  مشاريع  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  WP1  Land.shp ": lyr.findAndReplaceWorkspacePath (ص" M:  TEAM_GIS  EDKM  مشاريع  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  WP1 "ص" M:  TEAM_GIS  EDKM  مشاريع  mmo1065_south_habitat_mapping  20140708_Update_3_QA  3_Working_GIS_Files  SHP ") mxd.save () طباعة" Success "

لقد قمت بإزالة arcpy.RefreshActiveView () و arcpy.RefreshTOC () لأنهم يفعلون شيئًا فقط عندما يتم إنشاء كائن MapDocument الخاص بك باستخدام "CURRENT".


البحث والاستبدال باستخدام التعبيرات العادية

لدي ملف به مجموعة من الإعدادات الافتراضية للمستخدم. أريد تغيير بعض النص ، لكني أعاني من ابتكار أداة مطابقة وبديل. باستخدام المثال التالي:

أود استبدال # Trackpad:. مع تشغيل "Trackpad:."

لكسر المشكلة ، توصلت إلى شيء باستخدام أداة اختبار regex:

إذا حاولت استخدام هذا في Vim فإنه لا يعمل بالنسبة لي:

أعتقد أن مشكلتي تتلخص في سؤالين محددين:

  1. كيف يمكنني تجنب البحث عن n الأحرف ، وبدلاً من ذلك أتأكد من عدم ظهور # في نهاية مجموعة البحث؟
  2. كيف يمكنني استخدام مجموعات الالتقاط بفعالية؟

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


3 إجابات 3

أقترح استخدام ملف جأمر hange (وهو في الأساس ملف دelete إلى جانب ملف أppend ، على الرغم من أن الإلحاق يتم تطبيقه فقط على السطر الأخير في النطاق وهو بالضبط ما تريده هنا):

هنا نستخدم صيغة GNU sed للتحرير الموضعي (-i). يعتبر هذا الأمر c قياسيًا ومحمولًا. يدعم GNU sed:

كامتداد غير قياسي.

يجب تخطي أحرف الخط الجديد والشرطة المائلة للخلف (باستخدام شرطة مائلة للخلف) في نص الاستبدال.

باستخدام GNU sed

لاستبدال الأسطر التي تبدأ سطرًا يطابق 3 وتستمر في السطر المطابق 5 بالرمز الجديد:

بالنسبة للخطوط الموجودة في النطاق / 3 / ، / 5 / ، نقوم باختبار ما إذا كان السطر يطابق 5 (بمعنى أن هذا هو آخر سطر في المجموعة) ، وإذا كان الأمر كذلك ، فسنقوم بالاستبدال لإدراج رمز جديد. إذا تم إجراء الاستبدال ، فسيخبر الأمر t sed أن يقفز إلى نهاية الأوامر (في هذه الحالة تتم طباعة رمز جديد). إذا لم يكن الأمر كذلك ، فإن الأمر d يخبر sed بحذف السطر.

تتم طباعة جميع الأسطر الأخرى بشكل عادي.

لتغيير الملف في مكانه ، يمكن استخدام الخيار -i:

باستخدام awk

يتعامل الأمر awk مع الأسطر الموجودة في النطاق / 3 / ، / 5 / بشكل خاص. بالنسبة للأسطر الموجودة في هذا النطاق ، نختبر لمعرفة ما إذا كانت f تساوي صفرًا (أي ، إذا كانت! f صحيحة) ، وإذا كان الأمر كذلك ، فنحن نطبع رمزًا جديدًا ونضبط f على 1 ثم نتخطى بقية الأوامر وننتقل إلى السطر التالي.

بالنسبة للأسطر خارج النطاق / 3 / ، / 5 / ، لا يتم إجراء قفزة ويؤدي الرقم 1 إلى طباعة السطر. بمزيد من التفصيل ، 1 هو شرط. نظرًا لأن 1 ليس صفرًا ، يتم تقييم الشرط إلى صحيح. نظرًا لعدم ارتباط أي إجراء بالشرط ، يتم تنفيذ الإجراء الافتراضي وهو طباعة السطر. وبالتالي 1 هو اختصار لـ print-the-line.

لتغيير ملف في مكانه ، يمكن استخدام الخيار -i inplace مع GNU awk 4.1 أو أعلى:


رجل باكس

. تعد مقارنات الوقت باستخدام كلتا أوقات الملف مفيدة عند استخدام pax لإنشاء أرشيف تزايدي يستند إلى الوقت (سيتم أرشفة الملفات التي تم تغييرها خلال نطاق زمني محدد فقط).

يتكون النطاق الزمني من ستة حقول مختلفة ويجب أن يحتوي كل حقل على رقمين. التنسيق هو:

حيث cc هو أول رقمين من السنة (القرن) ، yy هو آخر رقمين من السنة ، أول مم هو الشهر (من 01 إلى 12) ، dd هو يوم الشهر (من 01 إلى 31 ) ، HH هي ساعة اليوم (من 00 إلى 23) ، MM هي الدقيقة (من 00 إلى 59) ، و SS هي الثواني (من 00 إلى 59). حقل الدقيقة MM مطلوب ، بينما الحقول الأخرى اختيارية ويجب إضافتها بالترتيب التالي:

يمكن إضافة حقل SS بشكل مستقل عن الحقول الأخرى. النطاقات الزمنية مرتبطة بالوقت الحالي ، لذلك.

. سيحدد جميع الملفات مع تعديل أو تغيير inode في الساعة 12:34 مساءً اليوم أو لاحقًا.

يمكن توفير نطاق زمني متعدد -T والتحقق من التوقفات مع المباراة الأولى.

. لذا فإن الأمر 11 الموجود في المثال الخاص بي هو نسبي اليوم - إنه أقل من تاريخ اليوم - وهو الثاني عشر - والباقي عبارة عن تنسيق قياسي "$ (date)" متبوعًا بفاصلة.

. باستثناء - وآخر شيء يستحق الذكر - أستخدم مسارًا مطلقًا للدليل الهدف - وكذلك يجب عليك إذا قمت بذلك. جميع الوثائق المرجعية سلوك غير محدد بالنسبة للمسارات المستهدفة النسبية - وفي المرة الأولى التي حاولت فيها استخدام pax ، كنت أقسم تحت أنفاسي لمدة ساعة في ارتباك مع كل النتائج الغريبة حتى استخدمت مسارًا مطلقًا.


  • s = الأمر البديل
  • original = تعبير عادي يصف الكلمة المراد استبدالها (أو الكلمة نفسها فقط)
  • جديد = النص الذي سيتم استبداله به
  • g = global (أي استبدل الكل وليس التكرار الأول فقط)

هناك العديد من الطرق لتحقيق ذلك. اعتمادًا على مدى تعقيد ما يحاول المرء تحقيقه من خلال استبدال السلسلة ، واعتمادًا على الأدوات التي يعرفها المستخدم ، قد تكون بعض الطرق مفضلة أكثر من غيرها.

في هذه الإجابة ، أستخدم ملف input.txt بسيطًا ، والذي يمكنك استخدامه لاختبار جميع الأمثلة المتوفرة هنا. محتويات الملف:

لا يُقصد بـ Bash معالجة النصوص حقًا ، ولكن يمكن إجراء الاستبدالات البسيطة عبر توسيع المعلمة ، ولا سيما هنا يمكننا استخدام بنية بسيطة $ .

لا يقوم هذا البرنامج النصي الصغير بالاستبدال الموضعي ، مما يعني أنه سيتعين عليك حفظ نص جديد في ملف جديد ، والتخلص من الملف القديم ، أو mv new.txt old.txt

ملاحظة جانبية: إذا كنت مهتمًا بمعرفة السبب بينما IFS = read -r do. تم استخدام & lt input.txt ، وهي في الأساس طريقة shell لقراءة سطر بسطر. انظر هذا للرجوع اليها.

AWK ، كونها أداة مساعدة لمعالجة النصوص ، مناسبة تمامًا لمثل هذه المهمة. يمكنه إجراء عمليات استبدال بسيطة وأكثر تقدمًا استنادًا إلى التعبيرات العادية. يوفر وظيفتين: sub () و gsub (). الأول يحل محل التكرار الأول فقط ، بينما يستبدل الثاني التكرارات في السلسلة بأكملها. على سبيل المثال ، إذا كان لدينا سلسلة واحدة من البطاطس اثنين ، فستكون هذه هي النتيجة:

يمكن لـ AWK أن تأخذ ملف الإدخال كوسيطة ، لذا فإن القيام بنفس الأشياء باستخدام input.txt سيكون أمرًا سهلاً:

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

Sed هو محرر خط. يستخدم أيضًا التعبيرات النمطية ، ولكن يكفي لإجراء عمليات الاستبدال البسيطة:

ما هو جيد في هذه الأداة هو أنها تحتوي على تحرير موضعي ، والذي يمكنك تمكينه باستخدام علامة -i.

Perl هي أداة أخرى تُستخدم غالبًا لمعالجة النصوص ، لكنها لغة ذات أغراض عامة ، وتُستخدم في الشبكات وإدارة النظام وتطبيقات سطح المكتب والعديد من الأماكن الأخرى. اقترضت الكثير من المفاهيم / الميزات من لغات أخرى مثل C و sed و awk وغيرها. يمكن إجراء الاستبدال البسيط على النحو التالي:

مثل sed ، تحتوي perl أيضًا على العلم -i.

بايثون

هذه اللغة متعددة الاستخدامات وتستخدم أيضًا في مجموعة متنوعة من التطبيقات. يحتوي على الكثير من الوظائف للعمل مع السلاسل ، من بينها استبدال () ، لذلك إذا كان لديك متغير مثل var = "Hello World" ، يمكنك إجراء var.replace ("Hello" ، "Good Morning")

طريقة بسيطة لقراءة الملف واستبدال السلسلة فيه ستكون على النحو التالي:

ومع ذلك ، مع Python ، تحتاج أيضًا إلى الإخراج إلى ملف جديد ، وهو ما يمكنك القيام به أيضًا من داخل البرنامج النصي نفسه. على سبيل المثال ، إليك فكرة بسيطة:

يجب استدعاء هذا البرنامج النصي باستخدام input.txt كوسيطة لسطر الأوامر. سيكون الأمر الدقيق لتشغيل برنامج Python النصي باستخدام وسيطة سطر الأوامر هو

بالطبع ، تأكد من أن ./myscript.py موجود في دليل العمل الحالي الخاص بك وللطريقة الأولى ، تأكد من أنه تم ضبطه على أنه قابل للتنفيذ مع chmod + x ./myscript.py

يمكن أن تحتوي Python أيضًا على تعبيرات منتظمة ، على وجه الخصوص ، هناك وحدة إعادة ، لها وظيفة re.sub () ، والتي يمكن استخدامها لعمليات الاستبدال الأكثر تقدمًا.

هناك عدد من الطرق المختلفة للقيام بذلك. أحدهما يستخدم sed و Regex. SED هو محرر دفق لتصفية النص وتحويله. أحد الأمثلة هو كما يلي:

هناك طريقة أخرى قد تكون منطقية أكثر من & lt strin و & gt strout وهي استخدام الأنابيب!

5 مرات أسرع. & ndash pbhj 22 أكتوبر 2017 الساعة 20:14

يمكنك استخدام Vim في وضع Ex:

ز استبدال جميع الحالات في كل سطر

x الكتابة إذا تم إجراء التغييرات (لديهم) والخروج

من خلال أمر gsub الخاص بـ awk ،

في المثال أعلاه ، يتم استبدال كل 1 بـ 0 بغض النظر عن العمود الذي توجد فيه.

إذا كنت تريد إجراء بديل في عمود معين ، فافعل ذلك ،

يستبدل 1 بـ 0 في العمود الأول فقط.

sed هو ستريم إدitor ، حيث يمكنك استخدام | (أنبوب) للإرسال تيارات قياسية (STDIN و STDOUT على وجه التحديد) من خلال sed وقم بتعديلها برمجيًا أثناء التنقل ، مما يجعلها أداة مفيدة في تقليد فلسفة Unix ولكن يمكنها أيضًا تحرير الملفات مباشرةً ، باستخدام المعلمة -i المذكورة أدناه.
ضع في اعتبارك ما يلي:

ق / يستخدم ل ساستبدل التعبير الموجود بالقليل بالصيغة asd:

/ g تعني "عالمي" ، وهذا يعني القيام بذلك للسطر بأكمله. إذا تركت / g (مع s / قليل / asd / ، يجب أن يكون هناك دائمًا ثلاث شرطات مائلة بغض النظر عن أي شيء) وقليل يظهر مرتين على نفس السطر ، يتم تغيير فقط القليلة الأولى إلى asd:

قلة من الرجال ، قلة من النساء ، شجعان.

الرجال الصغار ، النساء القلائل ، الشجعان.

هذا مفيد في بعض الظروف ، مثل تغيير الأحرف الخاصة في بداية السطور (على سبيل المثال ، استبدال الرموز الأكبر من التي يستخدمها بعض الأشخاص لاقتباس مادة سابقة في سلاسل البريد الإلكتروني بعلامة تبويب أفقية مع ترك عدم المساواة الجبرية المقتبسة لاحقًا في السطر لم يمسها) ، ولكن في مثالك حيث تحدد ذلك في أى مكان عدد قليل يحدث يجب استبداله ، تأكد من أن لديك / g.

يتم دمج الخيارين (الأعلام) التاليين في واحد ، -ie:

-i يستخدم الخيار للتحرير أناn مكان في الملف hello.txt.

يشير الخيار -e إلى ملف هxpression / الأمر للتشغيل ، في هذه الحالة s /.

ملاحظة: من المهم أن تستخدم -i -e للبحث / الاستبدال. إذا قمت بإجراء -ie ، تقوم بإنشاء نسخة احتياطية لكل ملف مرفق بالحرف "e".


هنا أستخدم sed لاستبدال كل تكرارات لكلمة "cybernetnews" بكلمة "cybernet" في كل ملف بالملحق c في الدليل / home / user / directory /.

شكل أكثر عمومية حيث تبحث بشكل متكرر من دليل التنفيذ وتعمل فقط على ملفات عادية وقابلة للقراءة وقابلة للكتابة:

يعد محرر الدفق ، sed ، أداة مساعدة قوية لهذا النوع من العمل وهو خياري الأول ، ومع ذلك ، إذا كنت تريد القيام بذلك من محرر نصوص عادي باستخدام تطبيق أصلي قائم على Ubuntu ، أقترح عليك إلقاء نظرة على Jedit ، وهو متوفر في المستودعات ويمكن تثبيته عن طريق الكتابة في وحدة التحكم الخاصة بك:

ابدأ jedit ، انقر فوق عنصر قائمة البحث ، في قائمة القائمة ، انقر فوق عنصر البحث في الدليل ، وسيظهر لك مربع الحوار أدناه:

هذا مشابه لذلك في Notepad ++ ويفعل نفس الشيء ، أعتقد أن هذا ما تريده.


ابحث عن عدة قيم مختلفة واستبدلها مرة واحدة

لدي ملف به مثيلات متعددة من Text_1 و Text1 وأحتاج إلى استبدال كلتا هاتين الجملتين بـ Text_A و TextB على التوالي.

أقوم حاليًا بعمل وظيفتي بحث واستبدال في كل ملف ، أحدهما يبحث عن Text_1 ويستبدله بـ Text_A والآخر يبحث عن Text1 ويستبدله بـ TextB.

هل هناك أي طريقة للقيام بذلك دفعة واحدة بدلاً من الاضطرار إلى تشغيل "بحث واستبدال" مرتين؟

أنا أستخدم Dreamweaver CS3 ، ولكن لدي أيضًا Notepad ++ ، و Notepad عادي ، و OO Writer ، و MS Word إذا كان ذلك سيكون أسهل. من الناحية المثالية ، يمكنني القيام بذلك في Dreamweaver أو Notepad ++ لكنني منفتح على تنزيل شيء آخر لإنجاز المهمة. أفضل عدم الاضطرار إلى القيام بأي من عناصر سطر الأوامر أو إنشاء ملف دفعي (بينما أنا على علم بذلك ، لا أفهمه حقًا).

في حالة عدم وضوح الوصف أعلاه ، دعني أوضح ذلك بهذه الطريقة.

أريد تشغيل Find & amp Replace 1 مرة في وثيقة واحدة وأريده أن يفعل الكل مما يلي خلال مثيل Find & amp Replace هذا:

  1. يجد Text_1 و يستبدل مع Text_A
  2. يجد Text1 و يستبدل مع TextB

انا ليس تحاول إجراء بحث واستبدال عبر عدة مستندات.


9 إجابات 9

إنه في الواقع بسيط للغاية مع sed: إذا تطابق سطر ما ، فقم فقط بنسخه إلى المساحة القديمة h ثم استبدل القيمة.
في la $ t line e x change ، احتفظ بالمساحة ومساحة النمط ثم تحقق مما إذا كانت الأخيرة فارغة. إذا لم يكن فارغًا ، فهذا يعني أن الاستبدال قد تم بالفعل ، لذا لا شيء تفعله. إذا كانت فارغة ، فهذا يعني أنه لم يتم العثور على تطابق ، لذا استبدل مساحة النمط بالمطلوب متغير = قيمة ثم إلحاق السطر الحالي في المخزن المؤقت. أخيرًا ، قم بتغيير e x مرة أخرى:


بالنسبة لاستبدالك ، فأنت تريد فقط إدخال مسافة. [: space:] لن يعمل هناك لأن هذا اختصار لفئة شخصية ولن يعرف محرك regex الحرف الذي يجب وضعه هناك.

يجب تخطي + في regex لأنه مع sed's regex engine + هو حرف عادي بينما + هو حرف أولي لـ "واحد أو أكثر". في الصفحة 86 من إتقان التعبيرات العادية، ذكر جيفري فريدل في حاشية سفلية أن ed و grep استخدما الأقواس المهروبة لأن "كين طومسون شعر أن التعبيرات العادية ستُستخدم للعمل بشكل أساسي مع كود C ، حيث تكون الحاجة إلى مطابقة الأقواس الخام أكثر شيوعًا من الرجوع إلى الخلف". أفترض أنه شعر بنفس الطريقة تجاه علامة الجمع ، ومن هنا جاءت الحاجة إلى الهروب منها لاستخدامها كحرف أول. من السهل التعثر بهذا الأمر.

في sed سوف تحتاج إلى الهروب +،؟ ، | ، ( ، و ) . أو استخدم -r لاستخدام التعبير العادي الممتد (ثم يبدو مثل sed -r -e "s / [[: space:]] + / / g" أو sed -re "s / [[: space:]] + / / ز "


اذهب الى هنا
http://gnuwin32.sourceforge.net/packages.html
قم بالتمرير لأسفل إلى SED. قم بتنزيل coreutils أيضًا أثناء تواجدك فيه.

سيحل هذا الأمر محل a بـ b عالميًا ، وفي كل سطر. لذلك ليس فقط التواجد الأول على الخط.

يدعم VBScript التعبيرات العادية ، يمكنك البحث عنها واستبدالها.

لقد كتبت أداة سطر أوامر مجانية لنظام Windows للقيام بذلك. يطلق عليه rxrepl ، وهو يدعم Unicode والبحث عن الملفات. قد يجدها البعض أداة مفيدة.

rxrepl هي أداة سطر أوامر Microsoft Windows للبحث عن نص واستبداله في ملفات نصية باستخدام التعبيرات العادية المتوافقة مع Perl (PCRE).

لديه الميزات التالية:

  • ابحث باستخدام التعابير العادية المتوافقة مع Perl
  • استخدم مطابقة المجموعة في النص البديل
  • يدعم نهايات سطر Windows و Unix
  • دعم يونيكود
  • يقبل بحث متعددة / استبدال الحجج
  • قد يتم توفير الخيارات في ملف الخيارات
  • تفحص الملفات
  • وضعية المعاينة
  • أوضاع مطابقة الخط والملف الكامل

يغطي Scripting Guy كيفية القيام بذلك في PowerShell (لا توجد تنزيلات إضافية على أحدث أنظمة تشغيل Windows ، فمن المحتمل أنك قمت بتثبيتها بالفعل).

ابدأ تشغيله ، قم بتشغيل ما يلي (لاستبدال * بـ @):

هذا يدعم التعبيرات العادية .NET ، بما في ذلك النظرة الإيجابية والسلبية ، وجميع أنواع الأشياء التي لم يدعمها برنامج Notepad ++ مع regex قبل الإصدار 6.x (بقدر ما أحب notepad ++).

لقد وجدت fnr.exe لذلك. لديها واجهة المستخدم الرسومية وسطر الأوامر.

أداة مفتوحة المصدر للبحث عن نص واستبداله في ملفات متعددة.

سمات

  • تنزيل ملف واحد - fnr.exe (127 كيلوبايت)
  • استبدال النص في ملفات متعددة باستخدام تطبيق windows أو من خلال سطر الأوامر
  • ابحث فقط لمعرفة مكان العثور على التطابقات
  • بحث حساس لحالة الأحرف
  • البحث عن الملفات في دليل واحد أو الدلائل الفرعية المتكررة
  • التعبيرات العادية
  • البحث عن نص متعدد الأسطر واستبداله
  • إنشاء زر سطر الأوامر لإنشاء نص سطر أوامر لوضعه في ملف دفعي
  • تعليمات سطر الأوامر
  • اختبارات الوحدة لمحرك البحث / الاستبدال

عرض خيارات سطر الأوامر

يبدو أنه يمكنك استخدام regex مع FINDSTR

يسمح findstr بالبحث عن نص (كما هو محدد بالنمط في اسم ملف الملف. إذا كان اسم الملف يحتوي على أحرف بدل (* أو؟) ، فإنه يبحث في جميع الملفات المطابقة. يبحث الخيار / S في الدليل الحالي بالإضافة إلى في الدلائل الفرعية الخاصة به. إذا كان النمط يحتوي على مسافات ، فيجب تحديده على النحو التالي / C: & quotsome text ليتم البحث عنه & quot. لتحويل النمط إلى تعبيرات عادية ، يجب استخدام الخيار / R. يبحث الخيار / I عن حالة الأحرف غير حساسة.

من تعليمات FindStr (Findstr /؟):

/ R - يستخدم سلاسل البحث كتعبيرات عادية.

لقد تأخرت قليلاً في الحفلة ، لكن JREPL.BAT عبارة عن أداة مساعدة مختلطة تعتمد على JScript / دفعات Regex تعمل محليًا على أي جهاز يعمل بنظام Windows من XP فصاعدًا.

تم تضمين التوثيق الكامل في البرنامج النصي ، والذي يمكن الوصول إليه عبر JREPL /؟ ، أو استخدم JREPL / ؟؟ للإخراج المقسم إلى صفحات.

تستخدم JREPL regex القياسي ECMA الذي يأتي مع JScript. ECMA regex ليس قويًا تمامًا مثل .NET regex المتاح لـ powerhell ، لكنه لا يزال جيدًا جدًا. وأعتقد أن المستخدم العادي سيجد هذه الأداة أسهل في الاستخدام من بوويرشيل.

توفر خيارات JREPL المدمجة بالفعل الكثير من القوة الكامنة ، لكن القدرة على حقن JScript التي يوفرها المستخدم تفتح بالفعل إمكانيات مذهلة.

لقد قمت بتطوير البرنامج النصي لأن مكان عملي لا يسمح بتنزيل ملفات exe غير القياسية ، ولكن لا توجد قيود على كتابة البرامج النصية المجمعة أو JScript :-)