هل هناك أي فائدة مثل sed لـ cmd.exe؟[مغلق]
المحلول
اليوم أنقذني بوويرشيل.
ل grep
هنالك:
get-content somefile.txt | where { $_ -match "expression"}
ولل sed
هنالك:
get-content somefile.txt | %{$_ -replace "expression","replace"}
لمزيد من التفاصيل انظر دخول مدونة زين نابلسيس.
نصائح أخرى
sed
(وأمثالها) موجودة ضمن عدة حزم من أوامر Unix.
- سيجوين يعمل ولكنه عملاق.
- UnxUtils أقل حجما بكثير.
- جنووين32 هو منفذ آخر يعمل.
- البديل الآخر هو أبحاث AT&T نظام يووين.
- MSYS من MinGw هو خيار آخر.
- نظام ويندوز الفرعي لينكس هو الخيار الأكثر "أصليًا"، لكنه غير مثبت على نظام التشغيل Windows افتراضيًا؛لديها
sed
,grep
إلخ.على الرغم من ذلك. - https://github.com/mbuilov/sed-windows يقدم الإصدارات الحديثة 4.3 و4.4، والتي تدعم
-z
خيار على عكس المنافذ العلوية المدرجة
إذا كنت لا ترغب في تثبيت أي شيء وكان نظامك ليس Windows Server، فعليك استطاع استخدم لغة البرمجة النصية (VBScript على سبيل المثال) لذلك.يوجد أدناه طعنة جسيمة وغير متوقعة.سيبدو سطر الأوامر الخاص بك
cscript //NoLogo sed.vbs s/(oldpat)/(newpat)/ < inpfile.txt > outfile.txt
حيث يوجد oldpat وnewpat أنماط regex لمايكروسوفت vbscript.من الواضح أنني قمت فقط بتنفيذ الأمر البديل وافترضت بعض الأشياء، ولكن يمكنك تجسيده ليكون أكثر ذكاءً وفهم المزيد عن sed
سطر الأوامر.
Dim pat, patparts, rxp, inp
pat = WScript.Arguments(0)
patparts = Split(pat,"/")
Set rxp = new RegExp
rxp.Global = True
rxp.Multiline = False
rxp.Pattern = patparts(1)
Do While Not WScript.StdIn.AtEndOfStream
inp = WScript.StdIn.ReadLine()
WScript.Echo rxp.Replace(inp, patparts(2))
Loop
إذا كنت لا ترغب في تثبيت أي شيء (أفترض أنك تريد إضافة البرنامج النصي إلى بعض الحلول/البرامج/الخ التي سيتم تشغيلها في أجهزة أخرى)، فيمكنك محاولة إنشاء برنامج نصي vbs (على سبيل المثال، استبدال.vbs):
Const ForReading = 1
Const ForWriting = 2
strFileName = Wscript.Arguments(0)
strOldText = Wscript.Arguments(1)
strNewText = Wscript.Arguments(2)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)
strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, strOldText, strNewText)
Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
objFile.Write strNewText
objFile.Close
وتقوم بتشغيله على النحو التالي:
cscript replace.vbs "C:\One.txt" "Robert" "Rob"
وهو مشابه لإصدار sed المقدم من "Bill Weaver"، لكنني أعتقد أن هذا الإصدار أكثر ملاءمة من حيث الأحرف الخاصة (' > < / ) .
بالمناسبة، أنا لم أكتب هذا، لكن لا أذكر من أين حصلت عليه.
هنالك سوبر سيد نسخة محسنة من سيد.بالنسبة لنظام التشغيل Windows، يعد هذا ملف .exe مستقلًا، مخصص للتشغيل من سطر الأوامر.
جرب Fart.exe.إنها أداة مساعدة للبحث عن النص واستبداله ويمكن استخدامها في برامج الأوامر المجمعة.
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt
هذا هو سلوك
sed -i 's/^SourceRegexp$/DestinationString/g' file.txt
يمكنك تثبيت Cygwin (http://www.cygwin.com/) واستخدم sed من هناك.
يمكنك تجربة بوويرشيل.هناك الحصول على المحتوى و ضبط المحتوى يتم إنشاء الأوامر التي يمكنك استخدامها.
أنا أستعمل سيجوين.أقابل الكثير من الأشخاص الذين لا يدركون أنه إذا قمت بوضع ثنائيات Cygwin على المسار الخاص بك، فيمكنك استخدامها من داخل Windows Command Shell.ليس عليك تشغيل Cygwin's Bash.
قد تنظر أيضا في خدمات ويندوز لنظام التشغيل Unix متوفر من Microsoft (ولكن فقط في الإصدار الاحترافي والإصدارات الأحدث من Windows).
إدلين أو تحرير
بالإضافة إلى وجود خدمات Windows لنظام Unix والتي تأتي مع العديد من أدوات Unix لنظام التشغيل Windows.http://technet.microsoft.com/en-us/interopmigration/bb380242.aspx
تحديث 12/7/12 في Windows 2003 R2 ، Windows 7 & Server 2008 ، إلخ.تم استبدال ما ورد أعلاه بالنظام الفرعي للتطبيقات المستندة إلى UNIX (SUA) كوظيفة إضافية.ولكن عليك تنزيل الأدوات المساعدة:http://www.microsoft.com/en-us/download/details.aspx?id=2391
يمكنك أن تنظر إلى أدوات جنو, ، فهي توفر (من بين أشياء أخرى) على النوافذ.
يوجد ملف دفعي مساعد لنظام التشغيل Windows يسمى repl.bat
الذي لديه الكثير من قدرة SED ولكن doesn't require any additional download
أو التثبيت.وهو ملف دفعي مختلط يستخدم Jscript
لتنفيذ الميزات وهكذا swift
, ، و doesn't suffer from the usual poison characters
معالجة الدفعات ويتعامل مع الخطوط الفارغة بسهولة.
تحميل repl
من - https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat
المؤلف هوdbenham من Stack overflow وdostips.com
ملف دفعي مساعد آخر يسمى findrepl.bat
يمنح مستخدم Windows الكثير من القدرة على GREP
ويستند أيضا Jscript
وهو أيضًا ملف دفعي مختلط.وهو يشارك فوائد repl.bat
تحميل findrepl
من - https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat
المؤلف هوaacini من تجاوز سعة المكدس وdostips.com
بقدر ما أعرف لا يوجد شيء مثل sed مدمج مع النوافذ.ومع ذلك، يتوفر sed لنظام التشغيل Windows بعدة أشكال مختلفة، بما في ذلك كجزء من Cygwin، إذا كنت تريد نظام فرعي كامل POSIX، أو باعتباره Win32 أصليًا قابلاً للتنفيذ إذا كنت تريد تشغيل sed فقط على سطر الأوامر.
Sed لنظام التشغيل Windows (مشروع GnuWin32)
إذا كان يجب أن يكون أصليًا لنظام التشغيل Windows، فإن الشيء الآخر الوحيد الذي يمكنني اقتراحه هو استخدام لغة برمجة نصية يدعمها Windows بدون وظائف إضافية، مثل VBScript.
يعمل Cygwin، ولكن هؤلاء المرافق متاحة أيضا.ما عليك سوى وضعها على محرك الأقراص لديك، ووضع الدليل في المسار الخاص بك، وسيكون لديك العديد من أدوات يونكس سهلة الاستخدام.IMHO خفيف الوزن مثل Cygwin (على الرغم من أنه يعمل أيضًا).
كنت بحاجة إلى أداة sed تعمل مع موجه Windows cmd.exe. ميناء إريك بيمينت سيد إلى ملف DOS واحد.exe عملت بشكل رائع بالنسبة لي.
انها جيدة جدا موثقة.
هذا يعمل على Vista Ultimate، ولست متأكدًا من Pro.
sed -f commandfilename.cmd file1 > file2