سؤال

أريد الهروب من اسم ملف DOS حتى أتمكن من استخدامه مع sed.لدي ملف دفعي DOS يشبه هذا:

set FILENAME=%~f1

sed 's/Some Pattern/%FILENAME%/' inputfile

(ملحوظة: %~f1 - يتوسع %1 إلى اسم مسار مؤهل بالكامل - C:\utils\MyFile.txt)

لقد وجدت أن الخطوط المائلة العكسية في %FILENAME% هم مجرد الهروب من الرسالة التالية.

كيف يمكنني مضاعفتهم حتى يهربوا؟

(لقد قمت بتثبيت cygwin لذا لا تتردد في استخدام أي أوامر *nix أخرى)

حل

الجمع بين اقتراحات جيريمي وألكساندرو نيدلكو ، واستخدام | للتحديد في أمر SED لدي

set FILENAME=%~f1
cygpath "s|Some Pattern|%FILENAME%|" >sedcmd.tmp
sed -f sedcmd.tmp inputfile
del /q sedcmd.tmp
هل كانت مفيدة؟

المحلول

هذا سيفي بالغرض.إنه أمر فوضوي لأنه في ملفات BAT لا يمكنك استخدام set var=`cmd` كما يمكنك في نظام التشغيل Unix.حقيقة أن الصدى لا يفهم علامات الاقتباس هي أيضًا فوضوية، ويمكن أن تؤدي إلى مشاكل إذا Some Pattern يحتوي على أحرف التعريف شل.

set FILENAME=%~f1
echo s/Some Pattern/%FILENAME%/ | sed -e "s/\\/\\\\/g" >sedcmd.tmp
sed -f sedcmd.tmp inputfile
del /q sedcmd.tmp

[تم التعديل]:أنا مندهش أنه لم ينجح بالنسبة لك.لقد قمت بتجربته للتو، وكان يعمل على جهازي.أنا أستخدم sed من http://sourceforge.net/projects/unxutils واستخدام cmd.exe لتشغيل تلك الأوامر في ملف الخفافيش.

نصائح أخرى

يمكنك المحاولة كبديل (من موجه الأوامر) ...

> cygpath -m c:\some\path
c:/some/path

كما يمكنك أن تتخيل، فإنه يحول الخطوط المائلة العكسية إلى خطوط مائلة.

@ ألكسندرو وجيريمي، شكرًا لمساعدتكم.كلاكما يحصل على أصوات مؤيدة

@ جيريمي

باستخدام طريقتك حصلت على الخطأ التالي:

السيد:-التعبير رقم 1، الحرف 8:الأمر `s 'غير منتهي

إذا كان بإمكانك تعديل إجابتك لجعلها تعمل فسأقبلها.(لصق الحل الخاص بي لا يحتسب)

تحديث: حسنًا، لقد قمت بتجربتها باستخدام UnixUtils ونجحت.(للإشارة، فإن UnixUtils الذي قمت بتنزيله كان بتاريخ 1 مارس 2007، ويستخدم الإصدار 3.02 من GNU sed، بينما يحتوي تثبيت Cygwin الخاص بي على إصدار GNU sed 4.1.5)

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