উইন্ডোজ কমান্ড-লাইন পরিবেশ ব্যবহার করে আপনি কোনও ফাইলের পাঠ্যটি কীভাবে সন্ধান এবং প্রতিস্থাপন করতে পারেন?


492

আমি উইন্ডোজ কমান্ড-লাইন পরিবেশ ব্যবহার করে একটি ব্যাচ ফাইলের স্ক্রিপ্ট লিখছি এবং কোনও ফাইলের প্রতিটি পাঠের উপস্থিতি (উদাহরণস্বরূপ "FOO") অন্য একটি (প্রাক্তন "বার") এর সাথে পরিবর্তন করতে চাই। এটি করার সহজ উপায় কী? কোন ফাংশন নির্মিত?



এটি ব্যবহার করুন:echo(%text:%search%=%replace%%)
বিজ্ঞানী_7

উত্তর:


308

এখানে প্রচুর উত্তর আমাকে সঠিক দিকে নির্দেশ করতে সহায়তা করেছে, তবে কোনওটিই আমার পক্ষে উপযুক্ত নয়, তাই আমি আমার সমাধান পোস্ট করছি।

আমার উইন্ডোজ 7 রয়েছে যা পাওয়ারশেলের অন্তর্নির্মিত সাথে আসে। এখানে স্ক্রিপ্টটি আমি কোনও ফাইলের সমস্ত পাঠ্য সন্ধান / প্রতিস্থাপন করতে ব্যবহার করি:

powershell -Command "(gc myFile.txt) -replace 'foo', 'bar' | Out-File -encoding ASCII myFile.txt"

এটি ব্যাখ্যা করতে:

  • powershell পাওয়ারসেল.এক্সই শুরু হয় যা উইন্ডোজ 7-এ অন্তর্ভুক্ত
  • -Command "... " পাওয়ারশেল.এক্স.ই.কে চালানোর জন্য কমান্ড সম্বলিত কমান্ড লাইন আর্গ is
  • (gc myFile.txt)myFile.txt( কমান্ডের gcজন্য সংক্ষিপ্ত Get-Content) এর সামগ্রী পড়ে
  • -replace 'foo', 'bar'কেবল প্রতিস্থাপন প্রতিস্থাপন কমান্ড সঞ্চালিত fooসঙ্গেbar
  • | Out-File myFile.txt ফাইলটি আউটপুট পাইপ myFile.txt
  • -encoding ASCII মন্তব্যগুলি উল্লেখ করার সাথে সাথে আউটপুট ফাইলটিকে ইউনিকোডে প্রতিলিপি প্রতিরোধ করে

পাওয়ারশেল.এক্সই ইতিমধ্যে আপনার পাঠ স্টেটমেন্টের অংশ হওয়া উচিত, তবে তা না হলে আপনি এটি যুক্ত করতে পারেন। আমার মেশিনে এটির অবস্থানC:\WINDOWS\system32\WindowsPowerShell\v1.0


71
সাবধান, এই কমান্ডটি ফাইলটি ইউনিকোড এনকোডিংয়ে ট্রান্সকোড করতে পারে। আপনি নিজে যোগ করে এনকোডিং উল্লেখ করতে পারেন -encoding ASCIIবা UTF8বা যাই হোক না কেন প্রয়োজন হয়। এছাড়াও সাবধান, আপনি যদি ইউটিএফ 8 টার্গেট করেন তবে এটি ফাইলের শুরুতে একটি বাইট অর্ডার চিহ্ন প্রবর্তন করতে পারে যা আসলটিতে উপস্থিত হয় নি।
উইক

78
@ উইক কোথায় রাখবেন তা নির্ধারণ করতে আমার কিছুটা সময় লেগেছে -encoding ASCII। ভবিষ্যতে যে কারও জন্য এটির প্রয়োজন হবে, এটি হবেOut-File -encoding ASCII myFile.txt
rwilson04

15
আমার পরিবর্তনের দরকার ছিল কেবল তার Set-Contentপরিবর্তে ব্যবহার করা Out-File
কুর্তজমার্ক

6
এটি কাজ করে তবে ফাইলগুলির একটি সংক্ষিপ্ত তালিকার চেয়েও পারফরম্যান্স ভয়ানক।
jsuddsjr

23
সাবধান যে প্রতিস্থাপন টোকেন (এই ক্ষেত্রে 'foo') নিয়মিত প্রকাশ হিসাবে বিবেচিত হয়। আপনার যদি সেখানে কোনও বিশেষ অক্ষর থাকে (আমার ছিল []], আপনার এগুলি একটি bac (ব্যাকস্ল্যাশ) দিয়ে বাঁচাতে হবে।
জেডাব্লু

183

আপনি যদি উইন্ডোজ সংস্করণে থাকেন যা .Net 2.0 সমর্থন করে, আমি আপনার শেলটি প্রতিস্থাপন করব। পাওয়ারশেল আপনাকে কমান্ড লাইন থেকে .NET এর সম্পূর্ণ শক্তি দেয়। পাশাপাশি অনেকগুলি কমান্ডলেট নির্মিত হয়েছে। নীচের উদাহরণটি আপনার প্রশ্নের সমাধান করবে। আমি কমান্ডগুলির পুরো নামগুলি ব্যবহার করছি, সংক্ষিপ্ত নাম আছে, তবে এটি আপনাকে গুগলকে কিছু দেয় gives

(Get-Content test.txt) | ForEach-Object { $_ -replace "foo", "bar" } | Set-Content test2.txt

10
আমি দেখতে পাই পাওয়ারশেল এটি সংরক্ষণাগারবদ্ধ করতে সক্ষম। তবে আমি কীভাবে ব্যাচ ফাইল থেকে এই রান করতে পারি (উদাহরণ: মাইপ্রোক.বাট)?
পাবলো ভেনচুরিনো

3
@ পাবলো, পাওয়ারশেল.এক্সই ব্যবহার করুন এবং পিএস কমান্ডকে একক প্যারামিটারে
মোড়ক করুন

56
-1 .. অবশ্যই উত্তরটি গ্রহণ করা হয়েছিল, তবে এটি নির্দিষ্ট প্রশ্নের উত্তর নয়।
baash05

28
আপনি যদি একই ফাইলটিতে সংরক্ষণ করেন তবে এটি ব্যবহারে ত্রুটিযুক্ত কোনও ফাইলের সাথে ব্যর্থ হবে। আপনাকে পাওয়ারশেল কমান্ডটি এতে পরিবর্তন করতে হবে: (গেট-কন্টেন্ট টেস্ট.টেক্সট) | ফরইচ-অবজেক্ট {। _- স্থান "foo", "বার"} | সেট-কন্টেন্ট টেস্ট.টেক্সট
বিগমোমা

6
@ রাচেলের উত্তর দেখুন:powershell -Command "(gc myFile.txt) -replace 'foo', 'bar' | sc myFile.txt"
নাইজেল টাচ ২

161

শুধু ব্যবহার করা বাতকর্ম ( " এফ IND একটি য় আর eplace টি : EXT" কমান্ড লাইন ইউটিলিটি)
ফাইল বৃহৎ সেট মধ্যে টেক্সট প্রতিস্থাপন জন্য চমৎকার সামান্য বিনামূল্যের।

সেটআপ ফাইলগুলি সোর্সফোর্সে রয়েছে

ব্যবহারের উদাহরণ:

fart.exe -p -r -c -- C:\tools\perl-5.8.9\* @@APP_DIR@@ C:\tools

এই পার্ল ডিস্ট্রিবিউশনের ফাইলগুলিতে পুনরাবৃত্তির জন্য প্রতিস্থাপনগুলির পূর্বরূপ দেখুন।

কেবলমাত্র সমস্যা: FART ওয়েবসাইটের আইকনটি হুবহু স্বাদযুক্ত, মিহি বা মার্জিত নয়;)


আপডেট 2017 (7 বছর পরে) jagb আউট পয়েন্ট মন্তব্যের 2011 নিবন্ধটি " সহজ পদ্ধতি দ্য ফার্টিং - খুঁজুন এবং পাঠ প্রতিস্থাপন করুন " থেকে মিকাইল তারপর


19
দুর্দান্ত জিনিস হ'ল এটি একক একক উদাহরণ। কোনও নির্ভরতা নেই। কোনও ছোট প্রিন্ট নেই। মোতায়েন করা সহজ।
সার্জ ওয়াটিয়ার

2
খুব হালকা ও ব্যবহারযোগ্য সহজ, তবে আমি আশা করছিলাম যে এটি প্রতিস্থাপনের সঠিক স্থানগুলি মুদ্রণ করবে। এটি দেখতে না পেয়ে আমাকে নিরাপত্তাহীনতার ধারণা দিয়েছে gave
উইলিয়াম নিউ

4
ধন্যবাদ, এটি নিখুঁত, স্ট্যান্ডার্ড ডস সরঞ্জামগুলির অংশ হওয়া উচিত এবং মনোযোগী হওয়া উচিত। তবে -p বিকল্পটি আপনাকে দেখায় না যে এটি 'কত' পরিবর্তন করবে এবং সর্বদা 0 প্রতিবেদন করে যা আমাকে কয়েক মিনিটের জন্য ছুঁড়ে ফেলেছে
শ্রাদ্ফার্থ্থ

3
আমি বুঝতে পারি এটি একটি খুব পুরানো প্রশ্ন তবে আমি আরও তথ্য পেয়েছি এবং আশা করি এটি স্ট্যাক ওভারফ্লো ব্যবহারকারীদের জন্য সহায়ক হবে। এফআরটি-র জন্য আরও একটি লিঙ্ক যেখানে পণ্যটি ভালভাবে ব্যাখ্যা করা হয়েছে: ফার্ট ব্যাখ্যা করেছেন @ ইম্টুনক.আর এবং অন্য একটি পৃষ্ঠা এখানে পাওয়া যাবে: ফার্ট দয়া করে প্রতিস্থাপনের বিষয়ে সতর্ক হন /এবং' এটি আমাদের সকলের জন্য কাজ করছে না , আমার জন্য এটি কিছু ক্ষেত্রে কাজ করেছে কেসগুলি তবে এটি কিছু ফাইলে কাজ করে নি এবং কেন জানি না .. আমি এটি অন্য পাঠ্যের সাথে টেক্সটটি প্রতিস্থাপন করতে ব্যবহার করেছি এবং এ/
jbb

4
@ জাগব আপনাকে ধন্যবাদ আরও দৃশ্যমানতার জন্য উত্তরে আমি আপনার লিঙ্কটি অন্তর্ভুক্ত করেছি।
ভনসি

128

প্রতিস্থাপন করুন - স্ট্রিং প্রতিস্থাপন ব্যবহার করে একটি স্ট্রিং প্রতিস্থাপন করুন বর্ণনা: অন্য স্ট্রিংয়ের সাথে একটি স্ট্রিং প্রতিস্থাপন করতে স্ট্রিং প্রতিস্থাপন বৈশিষ্ট্যটি ব্যবহার করুন। এখানে প্রদর্শিত উদাহরণটি স্ট্রিং ভেরিয়েবল স্ট্রের "টি" দিয়ে সমস্ত উপস্থিতি "তে" ভুল বানানকে প্রতিস্থাপন করে।

set str=teh cat in teh hat
echo.%str%
set str=%str:teh=the%
echo.%str%

স্ক্রিপ্ট আউটপুট:

teh cat in teh hat
the cat in the hat

রেফ: http://www.dostips.com/DtTipsStringManipulation.php# স্নিপেটস.পরিবর্তন


30
সিডের পরামর্শটি কীভাবে ভাল? এটি তাদের সকলের সর্বাধিক সাধারণ উত্তর বলে মনে হচ্ছে এবং কিছুই ইনস্টল করার প্রয়োজন নেই।
ডনবেকার

5
কোন ধরণের প্যাটার্ন ম্যাচিং এখানে করা যায়? ওয়াইল্ডকার্ডস, রেগেক্স ইত্যাদি?
কিয়ো

27
"সেড পরামর্শ ভাল কিভাবে?" - সেড এবং অনুরূপ ইউটিলিটিগুলি ফাইলগুলিতে কাজ করে; এই স্নিপেটটি ইনপুট ফাইল থেকে লাইনগুলি পড়ার এবং আউটপুট ফাইলে লেখার গুরুত্বপূর্ণ পদক্ষেপটি বাদ দেয়, যাতে ফাইলের কোনও বিশেষ অক্ষর সঠিকভাবে পরিচালিত হয় তা নিশ্চিত করে।
জো

7
@ আসাদ, হ্যাঁ এটি সত্য, ওপি ফাইলগুলি সম্পর্কে জিজ্ঞাসা করেছিল, তবে বাস্তবে এটি স্ট্রিমগুলির সাথে কাজ করে যা ফাইল হতে হবে না। তবে এখানে আমার বক্তব্যটি হ'ল এই উত্তরটি ত্রুটিযুক্ত, কারণ এটি কোনও স্ট্রিম থেকে পড়া / লেখার এবং কোনও বিশেষ চরিত্র পরিচালনা করার বিষয়টি বাদ দেয়।
জো

4
@ বিলটি পরিবর্তিত পাঠ্য হিসাবে পরিবর্তনশীল কীভাবে ব্যবহার করবেন? অর্থাত। আমার একটি ভেরিয়েবল এবং স্ট্রিংয়ের মান রয়েছে যার কিছু ডিলিমটার রয়েছে। str =% str সেট করুন: "##" =% ভ্যারভ্যালু %% কাজ করে না। কোন workaround?
মালটেক

55

ফাইল প্রতিস্থাপন.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  'WriteLine adds extra CR/LF
objFile.Close

এই সংশোধিত স্ক্রিপ্টটি (যা আমরা প্রতিস্থাপন.vbs কল করব) ব্যবহার করতে কেবল কমান্ড প্রম্পট থেকে এর অনুরূপ একটি কমান্ড টাইপ করুন:

cscript replace.vbs "C:\Scripts\Text.txt" "Jim " "James "


এটি পরিষ্কার, এটি RegEx ব্যবহারের অনুমতি দেয়?
ব্যবহারকারীর 80809 21

3
@ ব্যবহারকারী280109 হ্যাঁ, ভিবিএস স্ক্রিপ্ট সমর্থন করে RegExp। আপনি একটি রেগুলার এক্সপ্রেশন ব্যবহার প্রতিস্থাপন করতে এই ব্যবহার করতে পারেন: With (New RegExp): strNewText = .Replace(strText, strOldText, strNewText): End With। ব্যবহার করে আপনি প্রথম 9 ক্যাপচার দলের টেক্সট পেতে পারেন $1, $2... $9
টুথব্রাশ


1
@ user280109 আপনি কেবল কমান্ডটি দিয়েছেন, আমার কী প্রয়োজন। তবে আমি প্রতিস্থাপন করতে চাই (কেস-সংবেদনশীল) আপনি কি তার জন্য কমান্ডটি সরবরাহ করতে পারেন?
আজমল প্রবীণ

49

BatchSubstitute.batডাস্টিপস.কম এ খাঁটি ব্যাচ ফাইল ব্যবহার করে অনুসন্ধান এবং প্রতিস্থাপনের একটি উদাহরণ।

এটা একটি সমন্বয় ব্যবহার করে FOR, FINDএবং CALL SET

এর মধ্যে অক্ষরযুক্ত লাইনগুলি "&<>]|^ভুলভাবে চিকিত্সা করা যেতে পারে।



8
আমাকে এমন একটি কোড স্নিপেট সাইটের কার্যকারিতা নিয়ে প্রশ্ন করতে হবে যার ব্যবহারের শর্তাদি কোনও কোড অনুলিপি করতে নিষেধ করেছে ("আপনি ডোমেনপস.কমের অধীনে প্রদত্ত কোনও তথ্য ডোমেন মালিকের লিখিত অনুমতি ব্যতীত কোনও আকারে বিতরণ করতে পারবেন না।") ।
গিলস

1
আমি তাদের শর্তাদি বিভ্রান্তিকর বলে সম্মত, তারা এও বলেছে যে "ডোস্টিপস.কমের ডোমেনের অধীন প্রদত্ত তথ্যগুলি আশাবাদী কার্যকর" তাই আমার ধারণাটি হ'ল লোকেরা কোনও সমস্যা সমাধানের জন্য কোডটি অনুলিপি করতে খুশি happy আমি নিশ্চিত না যে আমি কোনও শর্তাবলী পড়েছি এবং খুশি হয়েছি ...
Morechilli

5
এটা অসাধারণ. আমি এমন উত্তরগুলি পছন্দ করি যা এটি করতে অন্য কিছু ডাউনলোড করা জড়িত না।
রুয়ারি ওব্রায়েন

আমি এমন সমাধানও পছন্দ করি যা বাহ্যিক ইউটিলিটিগুলিকে জড়িত না, দুর্ভাগ্যক্রমে, আমি এই ব্যাচটি চালানোর চেষ্টা করার সময় আমি "সন্ধান করুন: অবৈধ প্রিকিকেট` '"পেতে থাকি। এখনই এটি ডিবাগ করার সত্যিই সময় নেই।
জহমিক

2
"সন্ধান করুন: অবৈধ প্রিনিকেট` "" ত্রুটিটি আমার সিস্টেমে একটি বাহ্যিক 'ফাইন্ড' ইউটিলিটির কারণে হয়েছিল। একবার মুছে ফেলা হলে, এটি ভাল কাজ করেছে।
জহমিক

47

দ্রষ্টব্য - উন্নতমানের JREPL.BAT এর জন্য একটি লিঙ্কের জন্য এই উত্তরের শেষে আপডেটটি দেখতে নিশ্চিত হন যেটি REPL.BAT
JREPL.BAT 7.0 এবং তারপরে স্থানীয়ভাবে ইউনিকোড (ইউটিএফ-16LE) /UTFবিকল্পের মাধ্যমে সমর্থন করে ADO এর মাধ্যমে ইউটিএফ -8 সহ অন্যান্য চরিত্রের সেট !!!!


আমি একটি ছোট হাইব্রিড জেএসক্রিপ্ট / ব্যাচ ইউটিলিটি লিখেছি যা REPL.BAT নামক ASCII (বা বর্ধিত ASCII) ফাইলগুলি কমান্ড লাইন বা ব্যাচের ফাইলের মাধ্যমে সংশোধন করার জন্য খুব সুবিধাজনক। বিশুদ্ধরূপে নেটিভ স্ক্রিপ্টটির জন্য কার্যকর করা যায় এমন কোনও তৃতীয় পক্ষের ইনস্টলেশন প্রয়োজন হয় না এবং এটি এক্সপি পরবর্তী কোনও আধুনিক উইন্ডোজ সংস্করণে কাজ করে। এটি খুব দ্রুত, বিশেষ করে খাঁটি ব্যাচের সমাধানগুলির সাথে তুলনা করার সময়ও।

REPL.BAT কেবল স্টিডিন পড়ে, একটি JScript রেজেক্স অনুসন্ধান করে এবং প্রতিস্থাপন করে এবং ফলাফলটি স্টাডআউটে লিখে দেয়।

REPL.BAT আপনার বর্তমান ফোল্ডারে রয়েছে, বা আপনার প্যাথের কোথাও কোথাও আরও ভাল: এটি পরীক্ষা.txt বারে foo প্রতিস্থাপনের একটি তুচ্ছ উদাহরণ এখানে দেওয়া হয়েছে:

type test.txt|repl "foo" "bar" >test.txt.new
move /y test.txt.new test.txt

জেএসক্রিপ্ট রেজেক্স ক্ষমতাগুলি এটিকে খুব শক্তিশালী করে তোলে, বিশেষত প্রতিস্থাপন পাঠ্যের সন্ধানের পাঠ্য থেকে প্রাপ্ত সাবস্ট্রিংগুলিকে উল্লেখ করার ক্ষমতা।

আমি ইউটিলিটিতে বেশ কয়েকটি বিকল্প অন্তর্ভুক্ত করেছি যা এটিকে বেশ শক্তিশালী করে তোলে। উদাহরণস্বরূপ, Mএবং Xবিকল্পগুলি একত্রিত করে বাইনারি ফাইলগুলির পরিবর্তনকে সক্ষম করে! Mমাল্টি লাইন বিকল্প একাধিক লাইনের জুড়ে অনুসন্ধান পারেন। Xবর্ধিত প্রতিকল্পন প্যাটার্ন বিকল্প পালাবার ক্রম যে প্রতিস্থাপন পাঠ্য কোনো বাইনারি মান অন্তর্ভুক্তি সক্ষম প্রদান করে।

সম্পূর্ণ ইউটিলিটি খাঁটি জেএসক্রিপ্ট হিসাবে লেখা যেতে পারে, তবে হাইব্রিড ব্যাচ ফাইলটি প্রতিবার আপনি ইউটিলিটিটি ব্যবহার করতে চাইলে স্পষ্টতই সিএসসিআরটিটি নির্দিষ্ট করার প্রয়োজনটিকে সরিয়ে দেয়।

এখানে REPL.BAT স্ক্রিপ্ট। সম্পূর্ণ ডকুমেন্টেশন স্ক্রিপ্ট মধ্যে এম্বেড করা হয়।

@if (@X)==(@Y) @end /* Harmless hybrid line that begins a JScript comment

::************ Documentation ***********
::REPL.BAT version 6.2
:::
:::REPL  Search  Replace  [Options  [SourceVar]]
:::REPL  /?[REGEX|REPLACE]
:::REPL  /V
:::
:::  Performs a global regular expression search and replace operation on
:::  each line of input from stdin and prints the result to stdout.
:::
:::  Each parameter may be optionally enclosed by double quotes. The double
:::  quotes are not considered part of the argument. The quotes are required
:::  if the parameter contains a batch token delimiter like space, tab, comma,
:::  semicolon. The quotes should also be used if the argument contains a
:::  batch special character like &, |, etc. so that the special character
:::  does not need to be escaped with ^.
:::
:::  If called with a single argument of /?, then prints help documentation
:::  to stdout. If a single argument of /?REGEX, then opens up Microsoft's
:::  JScript regular expression documentation within your browser. If a single
:::  argument of /?REPLACE, then opens up Microsoft's JScript REPLACE
:::  documentation within your browser.
:::
:::  If called with a single argument of /V, case insensitive, then prints
:::  the version of REPL.BAT.
:::
:::  Search  - By default, this is a case sensitive JScript (ECMA) regular
:::            expression expressed as a string.
:::
:::            JScript regex syntax documentation is available at
:::            http://msdn.microsoft.com/en-us/library/ae5bf541(v=vs.80).aspx
:::
:::  Replace - By default, this is the string to be used as a replacement for
:::            each found search expression. Full support is provided for
:::            substituion patterns available to the JScript replace method.
:::
:::            For example, $& represents the portion of the source that matched
:::            the entire search pattern, $1 represents the first captured
:::            submatch, $2 the second captured submatch, etc. A $ literal
:::            can be escaped as $$.
:::
:::            An empty replacement string must be represented as "".
:::
:::            Replace substitution pattern syntax is fully documented at
:::            http://msdn.microsoft.com/en-US/library/efy6s3e6(v=vs.80).aspx
:::
:::  Options - An optional string of characters used to alter the behavior
:::            of REPL. The option characters are case insensitive, and may
:::            appear in any order.
:::
:::            A - Only print altered lines. Unaltered lines are discarded.
:::                If the S options is present, then prints the result only if
:::                there was a change anywhere in the string. The A option is
:::                incompatible with the M option unless the S option is present.
:::
:::            B - The Search must match the beginning of a line.
:::                Mostly used with literal searches.
:::
:::            E - The Search must match the end of a line.
:::                Mostly used with literal searches.
:::
:::            I - Makes the search case-insensitive.
:::
:::            J - The Replace argument represents a JScript expression.
:::                The expression may access an array like arguments object
:::                named $. However, $ is not a true array object.
:::
:::                The $.length property contains the total number of arguments
:::                available. The $.length value is equal to n+3, where n is the
:::                number of capturing left parentheses within the Search string.
:::
:::                $[0] is the substring that matched the Search,
:::                $[1] through $[n] are the captured submatch strings,
:::                $[n+1] is the offset where the match occurred, and
:::                $[n+2] is the original source string.
:::
:::                Arguments $[0] through $[10] may be abbreviated as
:::                $1 through $10. Argument $[11] and above must use the square
:::                bracket notation.
:::
:::            L - The Search is treated as a string literal instead of a
:::                regular expression. Also, all $ found in the Replace string
:::                are treated as $ literals.
:::
:::            M - Multi-line mode. The entire contents of stdin is read and
:::                processed in one pass instead of line by line, thus enabling
:::                search for \n. This also enables preservation of the original
:::                line terminators. If the M option is not present, then every
:::                printed line is terminated with carriage return and line feed.
:::                The M option is incompatible with the A option unless the S
:::                option is also present.
:::
:::                Note: If working with binary data containing NULL bytes,
:::                      then the M option must be used.
:::
:::            S - The source is read from an environment variable instead of
:::                from stdin. The name of the source environment variable is
:::                specified in the next argument after the option string. Without
:::                the M option, ^ anchors the beginning of the string, and $ the
:::                end of the string. With the M option, ^ anchors the beginning
:::                of a line, and $ the end of a line.
:::
:::            V - Search and Replace represent the name of environment
:::                variables that contain the respective values. An undefined
:::                variable is treated as an empty string.
:::
:::            X - Enables extended substitution pattern syntax with support
:::                for the following escape sequences within the Replace string:
:::
:::                \\     -  Backslash
:::                \b     -  Backspace
:::                \f     -  Formfeed
:::                \n     -  Newline
:::                \q     -  Quote
:::                \r     -  Carriage Return
:::                \t     -  Horizontal Tab
:::                \v     -  Vertical Tab
:::                \xnn   -  Extended ASCII byte code expressed as 2 hex digits
:::                \unnnn -  Unicode character expressed as 4 hex digits
:::
:::                Also enables the \q escape sequence for the Search string.
:::                The other escape sequences are already standard for a regular
:::                expression Search string.
:::
:::                Also modifies the behavior of \xnn in the Search string to work
:::                properly with extended ASCII byte codes.
:::
:::                Extended escape sequences are supported even when the L option
:::                is used. Both Search and Replace support all of the extended
:::                escape sequences if both the X and L opions are combined.
:::
:::  Return Codes:  0 = At least one change was made
:::                     or the /? or /V option was used
:::
:::                 1 = No change was made
:::
:::                 2 = Invalid call syntax or incompatible options
:::
:::                 3 = JScript runtime error, typically due to invalid regex
:::
::: REPL.BAT was written by Dave Benham, with assistance from DosTips user Aacini
::: to get \xnn to work properly with extended ASCII byte codes. Also assistance
::: from DosTips user penpen diagnosing issues reading NULL bytes, along with a
::: workaround. REPL.BAT was originally posted at:
::: http://www.dostips.com/forum/viewtopic.php?f=3&t=3855
:::

::************ Batch portion ***********
@echo off
if .%2 equ . (
  if "%~1" equ "/?" (
    <"%~f0" cscript //E:JScript //nologo "%~f0" "^:::" "" a
    exit /b 0
  ) else if /i "%~1" equ "/?regex" (
    explorer "http://msdn.microsoft.com/en-us/library/ae5bf541(v=vs.80).aspx"
    exit /b 0
  ) else if /i "%~1" equ "/?replace" (
    explorer "http://msdn.microsoft.com/en-US/library/efy6s3e6(v=vs.80).aspx"
    exit /b 0
  ) else if /i "%~1" equ "/V" (
    <"%~f0" cscript //E:JScript //nologo "%~f0" "^::(REPL\.BAT version)" "$1" a
    exit /b 0
  ) else (
    call :err "Insufficient arguments"
    exit /b 2
  )
)
echo(%~3|findstr /i "[^SMILEBVXAJ]" >nul && (
  call :err "Invalid option(s)"
  exit /b 2
)
echo(%~3|findstr /i "M"|findstr /i "A"|findstr /vi "S" >nul && (
  call :err "Incompatible options"
  exit /b 2
)
cscript //E:JScript //nologo "%~f0" %*
exit /b %errorlevel%

:err
>&2 echo ERROR: %~1. Use REPL /? to get help.
exit /b

************* JScript portion **********/
var rtn=1;
try {
  var env=WScript.CreateObject("WScript.Shell").Environment("Process");
  var args=WScript.Arguments;
  var search=args.Item(0);
  var replace=args.Item(1);
  var options="g";
  if (args.length>2) options+=args.Item(2).toLowerCase();
  var multi=(options.indexOf("m")>=0);
  var alterations=(options.indexOf("a")>=0);
  if (alterations) options=options.replace(/a/g,"");
  var srcVar=(options.indexOf("s")>=0);
  if (srcVar) options=options.replace(/s/g,"");
  var jexpr=(options.indexOf("j")>=0);
  if (jexpr) options=options.replace(/j/g,"");
  if (options.indexOf("v")>=0) {
    options=options.replace(/v/g,"");
    search=env(search);
    replace=env(replace);
  }
  if (options.indexOf("x")>=0) {
    options=options.replace(/x/g,"");
    if (!jexpr) {
      replace=replace.replace(/\\\\/g,"\\B");
      replace=replace.replace(/\\q/g,"\"");
      replace=replace.replace(/\\x80/g,"\\u20AC");
      replace=replace.replace(/\\x82/g,"\\u201A");
      replace=replace.replace(/\\x83/g,"\\u0192");
      replace=replace.replace(/\\x84/g,"\\u201E");
      replace=replace.replace(/\\x85/g,"\\u2026");
      replace=replace.replace(/\\x86/g,"\\u2020");
      replace=replace.replace(/\\x87/g,"\\u2021");
      replace=replace.replace(/\\x88/g,"\\u02C6");
      replace=replace.replace(/\\x89/g,"\\u2030");
      replace=replace.replace(/\\x8[aA]/g,"\\u0160");
      replace=replace.replace(/\\x8[bB]/g,"\\u2039");
      replace=replace.replace(/\\x8[cC]/g,"\\u0152");
      replace=replace.replace(/\\x8[eE]/g,"\\u017D");
      replace=replace.replace(/\\x91/g,"\\u2018");
      replace=replace.replace(/\\x92/g,"\\u2019");
      replace=replace.replace(/\\x93/g,"\\u201C");
      replace=replace.replace(/\\x94/g,"\\u201D");
      replace=replace.replace(/\\x95/g,"\\u2022");
      replace=replace.replace(/\\x96/g,"\\u2013");
      replace=replace.replace(/\\x97/g,"\\u2014");
      replace=replace.replace(/\\x98/g,"\\u02DC");
      replace=replace.replace(/\\x99/g,"\\u2122");
      replace=replace.replace(/\\x9[aA]/g,"\\u0161");
      replace=replace.replace(/\\x9[bB]/g,"\\u203A");
      replace=replace.replace(/\\x9[cC]/g,"\\u0153");
      replace=replace.replace(/\\x9[dD]/g,"\\u009D");
      replace=replace.replace(/\\x9[eE]/g,"\\u017E");
      replace=replace.replace(/\\x9[fF]/g,"\\u0178");
      replace=replace.replace(/\\b/g,"\b");
      replace=replace.replace(/\\f/g,"\f");
      replace=replace.replace(/\\n/g,"\n");
      replace=replace.replace(/\\r/g,"\r");
      replace=replace.replace(/\\t/g,"\t");
      replace=replace.replace(/\\v/g,"\v");
      replace=replace.replace(/\\x[0-9a-fA-F]{2}|\\u[0-9a-fA-F]{4}/g,
        function($0,$1,$2){
          return String.fromCharCode(parseInt("0x"+$0.substring(2)));
        }
      );
      replace=replace.replace(/\\B/g,"\\");
    }
    search=search.replace(/\\\\/g,"\\B");
    search=search.replace(/\\q/g,"\"");
    search=search.replace(/\\x80/g,"\\u20AC");
    search=search.replace(/\\x82/g,"\\u201A");
    search=search.replace(/\\x83/g,"\\u0192");
    search=search.replace(/\\x84/g,"\\u201E");
    search=search.replace(/\\x85/g,"\\u2026");
    search=search.replace(/\\x86/g,"\\u2020");
    search=search.replace(/\\x87/g,"\\u2021");
    search=search.replace(/\\x88/g,"\\u02C6");
    search=search.replace(/\\x89/g,"\\u2030");
    search=search.replace(/\\x8[aA]/g,"\\u0160");
    search=search.replace(/\\x8[bB]/g,"\\u2039");
    search=search.replace(/\\x8[cC]/g,"\\u0152");
    search=search.replace(/\\x8[eE]/g,"\\u017D");
    search=search.replace(/\\x91/g,"\\u2018");
    search=search.replace(/\\x92/g,"\\u2019");
    search=search.replace(/\\x93/g,"\\u201C");
    search=search.replace(/\\x94/g,"\\u201D");
    search=search.replace(/\\x95/g,"\\u2022");
    search=search.replace(/\\x96/g,"\\u2013");
    search=search.replace(/\\x97/g,"\\u2014");
    search=search.replace(/\\x98/g,"\\u02DC");
    search=search.replace(/\\x99/g,"\\u2122");
    search=search.replace(/\\x9[aA]/g,"\\u0161");
    search=search.replace(/\\x9[bB]/g,"\\u203A");
    search=search.replace(/\\x9[cC]/g,"\\u0153");
    search=search.replace(/\\x9[dD]/g,"\\u009D");
    search=search.replace(/\\x9[eE]/g,"\\u017E");
    search=search.replace(/\\x9[fF]/g,"\\u0178");
    if (options.indexOf("l")>=0) {
      search=search.replace(/\\b/g,"\b");
      search=search.replace(/\\f/g,"\f");
      search=search.replace(/\\n/g,"\n");
      search=search.replace(/\\r/g,"\r");
      search=search.replace(/\\t/g,"\t");
      search=search.replace(/\\v/g,"\v");
      search=search.replace(/\\x[0-9a-fA-F]{2}|\\u[0-9a-fA-F]{4}/g,
        function($0,$1,$2){
          return String.fromCharCode(parseInt("0x"+$0.substring(2)));
        }
      );
      search=search.replace(/\\B/g,"\\");
    } else search=search.replace(/\\B/g,"\\\\");
  }
  if (options.indexOf("l")>=0) {
    options=options.replace(/l/g,"");
    search=search.replace(/([.^$*+?()[{\\|])/g,"\\$1");
    if (!jexpr) replace=replace.replace(/\$/g,"$$$$");
  }
  if (options.indexOf("b")>=0) {
    options=options.replace(/b/g,"");
    search="^"+search
  }
  if (options.indexOf("e")>=0) {
    options=options.replace(/e/g,"");
    search=search+"$"
  }
  var search=new RegExp(search,options);
  var str1, str2;

  if (srcVar) {
    str1=env(args.Item(3));
    str2=str1.replace(search,jexpr?replFunc:replace);
    if (!alterations || str1!=str2) if (multi) {
      WScript.Stdout.Write(str2);
    } else {
      WScript.Stdout.WriteLine(str2);
    }
    if (str1!=str2) rtn=0;
  } else if (multi){
    var buf=1024;
    str1="";
    while (!WScript.StdIn.AtEndOfStream) {
      str1+=WScript.StdIn.Read(buf);
      buf*=2
    }
    str2=str1.replace(search,jexpr?replFunc:replace);
    WScript.Stdout.Write(str2);
    if (str1!=str2) rtn=0;
  } else {
    while (!WScript.StdIn.AtEndOfStream) {
      str1=WScript.StdIn.ReadLine();
      str2=str1.replace(search,jexpr?replFunc:replace);
      if (!alterations || str1!=str2) WScript.Stdout.WriteLine(str2);
      if (str1!=str2) rtn=0;
    }
  }
} catch(e) {
  WScript.Stderr.WriteLine("JScript runtime error: "+e.message);
  rtn=3;
}
WScript.Quit(rtn);

function replFunc($0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $10) {
  var $=arguments;
  return(eval(replace));
}


গুরুত্বপূর্ণ আপডেট

আমি REPL.BAT এর বিকাশ বন্ধ করে দিয়ে এটিকে JREPL.BAT দিয়ে প্রতিস্থাপন করেছি। এই নতুন ইউটিলিটিতে REPL.BAT এর একই কার্যকারিতা রয়েছে এবং আরও অনেক কিছু:

  • দেশীয় সিএসপিআরটি ইউনিকোড ক্ষমতাগুলির মাধ্যমে ইউনিকোড ইউটিএফ -16LE সমর্থন, এবং এডিওর মাধ্যমে অন্য কোনও অক্ষর সেট (ইউটিএফ -8 সহ)।
  • সরাসরি একটি ফাইল থেকে / লিখতে সরাসরি পড়ুন: পাইপ, পুনঃনির্দেশ, বা সরানো কমান্ডের প্রয়োজন নেই।
  • সংযুক্ত ব্যবহারকারী সরবরাহ করেছেন জেএসক্রিপ্ট
  • ইউনিক্স ট্রির অনুরূপ অনুবাদ সুবিধা, এটি কেবল রেগেক্স অনুসন্ধান এবং জেএসক্রিপ্ট প্রতিস্থাপনকে সমর্থন করে
  • মেলানো নয় এমন পাঠ্য বাতিল করুন
  • লাইনের নম্বর সহ উপসর্গ আউটপুট লাইন
  • এবং আরও ...

সর্বদা হিসাবে, সম্পূর্ণ ডকুমেন্টেশন স্ক্রিপ্ট মধ্যে এম্বেড করা হয়।

আসল তুচ্ছ সমাধান এখন আরও সহজ:

jrepl "foo" "bar" /f test.txt /o -

JREPL.BAT এর বর্তমান সংস্করণ ডসটিপস এ উপলব্ধ । ব্যবহারের উদাহরণ এবং বিকাশের ইতিহাস দেখতে থ্রেডে পরবর্তী পোস্টগুলি পড়ুন।


দুর্দান্ত জিনিস! আমি সরলতার এই বি / সি পছন্দ করি এবং আপনি যে কোনও স্ক্রিপ্টের সাথে এটি খাপ খাইয়ে নিতে পারেন, তাই ক্রেপি ব্যাচের চেয়ে জেএস কোডটি লিখছেন।
আদপতবি

সম্পাদনা করুন - শুধুমাত্র মুদ্রিত লাইনে মুদ্রণের জন্য একটি বিকল্প যুক্ত হয়েছে। \qপ্রতিনিধিত্ব করতে সমর্থন করার জন্য এক্স বিকল্পটিও "বর্ধিত করা হয়েছে এবং এল এবং এক্স বিকল্পগুলি একত্রিত করার সাথে অনুসন্ধানের অক্ষরগুলি এখন সমস্ত বর্ধিত পালানোর ক্রমগুলি সমর্থন করে।
dbenham

@ ডিবেনহাম - +1। এটি একটি চতুর পন্থা, এটি বেশ কয়েকটি অন্যান্য কাজের জন্যও কার্যকর হবে। এটি পোস্ট করার জন্য ধন্যবাদ।
BW

সম্পাদনা - এক্স বিকল্পটি ব্যবহার করার সময় আমি \ xnn এর আচরণটি পরিবর্তন করেছিলাম যাতে কোডটি বর্ধিত ASCII বাইট কোডটি উপস্থাপন করে। এছাড়াও একটি / ভি সংস্করণ বিকল্প যুক্ত করা হয়েছে।
dbenham

9
@dbenham এই একটি মণি। আপনি কেন এটি গিটহাবের বা গিস্ট হিসাবে রাখেন না? সংস্করণ তৈরি, ফলো-আপগুলি, রিলিজ / বিতরণ, সংশোধন এবং আরও সহজ করে তুলবে। যদি আপনার এটির সহায়তার দরকার হয় তবে আমাকে জানান।
আতিফ আজিজ

36

এফএনআর ব্যবহার করুন

fnrইউটিলিটি ব্যবহার করুন । এটি কিছু সুবিধা পেয়েছে fart:

  • নিয়মিত অভিব্যক্তি
  • .চ্ছিক জিইউআই। ব্যাচ ফাইলে রাখার জন্য কমান্ড লাইন পাঠ্য তৈরি করতে একটি "জেনারেট কমান্ড লাইন বোতাম" আছে।
  • মাল্টি-লাইন নিদর্শন: জিইউআই আপনাকে সহজেই বহু-লাইন নিদর্শনগুলির সাথে কাজ করতে দেয়। FART এ আপনাকে ম্যানুয়ালি লাইন ব্রেকগুলি এড়াতে হবে।
  • আপনাকে পাঠ্য ফাইল এনকোডিং নির্বাচন করার অনুমতি দেয়। এছাড়াও একটি অটো সনাক্ত বিকল্প আছে।

এফএনআরটি এখানে ডাউনলোড করুন: http://findandreplace.io/?z=codeplex

ব্যবহারের উদাহরণ: fnr --cl --dir "<Directory Path>" --fileMask "hibernate.*" --useRegEx --find "find_str_expression" --replace "replace_string"


1
এটা সুন্দর. গুই থেকে কমান্ড লাইন তৈরি করতে সক্ষম হওয়াই একটি দুর্দান্ত সাধারণ বৈশিষ্ট্য যা আমাকে দ্রুত চালিয়ে যায়।
ডেভিড হ্যামন্ড

খুব দরকারী সরঞ্জাম। এর আগে এফআরটির চেষ্টা করা হলেও ডকুমেন্টেশনটির মেয়াদ শেষ।
আর্টুর কেডজিয়র

দুর্দান্ত সরঞ্জাম, এটি এমনকি নিয়মিত অভিব্যক্তি সমর্থন করে। এটি এমন কিছু যা FART অনুপস্থিত।
ডিও ফুং

1
এই সরঞ্জামটি ইঙ্গিত করার জন্য ধন্যবাদ। একক উদাহরণ, এফআরটি-র দুর্দান্ত প্রতিস্থাপন যা আর বিকশিত হয় না (এবং রেজেক্স মিস করে); এবং পাওয়ারশেল সিনট্যাক্সটি খুব অসহনীয়।
গ্রাস ডাবল

এটি সবচেয়ে দরকারী। উইন্ডোতে গ্রেপ + সিড প্রতিস্থাপনের সন্ধান করছিল, এটি দুর্দান্ত কাজ করেছে!
সার্বান তানাসা

25

আমি মনে করি না কোনও বিল্ট-ইন কমান্ড দিয়ে এটি করার একটি উপায় আছে। আমি আপনাকে Gnuwin32 বা UnxUtils এর মতো কিছু ডাউনলোড করতে এবং sedকমান্ডটি ব্যবহার করতে (বা কেবল ডাউনলোড করতে sed) পরামর্শ দিচ্ছি :

sed -c s/FOO/BAR/g filename

2
সাইগউইন ( সাইগউইন.কম ) ব্যবহার করুন । এটি আসলে লিনাক্স ইনস্টল করার পরবর্তী সেরা জিনিস।
অ্যান্ড্রু জনসন

কেউ যদি এমন কোনও সমাধান সরবরাহ করতে পারে যা সাইগউইন ইনস্টল করার উপর নির্ভর করে না। পসিক্স স্ট্রিং ম্যানিপুলেশন হ'ল নো-ব্রেইনার - উইন্ডোজে এটি করা কিছুটা অস্পষ্ট।
রেক্স

4
জ্ঞানউইন 32 এবং আনক্সুটিলগুলি উইন্ডোজের জন্য নির্মিত একা একা বাইনারি। তারা সাইগউইনের উপর নির্ভরশীল নয়।
ফেরুঁচিও

1
সাইগউইন: sed -i -b -e 's/FOO/BAR/g' `find . -name *.txt`-i - ফাইলের জায়গায় সম্পাদনা করুন; -বি - সিআর + এলএফ প্রক্রিয়া করবেন না - এই বিকল্প ব্যতীত সিআর + এলএফ এলএফ-তে রূপান্তরিত হবে
আলেক্সি ভিশেন্টসেইভ

@ অ্যান্ড্রু জোনসন মতামত এবং তথ্য দুটি পৃথক জিনিস।
প্রেজা 8

21

আমি জানি আমি পার্টিতে দেরি করছি ..

ব্যক্তিগতভাবে, আমি এখানে সমাধানটি পছন্দ করি: - http://www.dostips.com/DtTipsStringManipulation.php# স্নিপেটস.পরিবর্তন

এছাড়াও আমরা এসএমটিপি এর মাধ্যমে প্রতিদিন প্রায় 500 টি ই-মেইল সরবরাহ করতে সহায়তা করতে ডডাপ ফাংশনটি ব্যাপকভাবে ব্যবহার করি: - https://groups.google.com/forum/#!topic/alt.msdos.batch.nt/sj8IUhMOq6o

এবং এগুলি উভয়ই কোনও অতিরিক্ত সরঞ্জাম বা ইউটিলিটিগুলির প্রয়োজনীয়তার সাথে স্থানীয়ভাবে কাজ করে।

REPLACER:

DEL New.txt
setLocal EnableDelayedExpansion
For /f "tokens=* delims= " %%a in (OLD.txt) do (
Set str=%%a
set str=!str:FOO=BAR!
echo !str!>>New.txt
)
ENDLOCAL

সরবরাহকারীর (একটি ABA নম্বরের জন্য -9 এর ব্যবহারটি নোট করুন):

REM DE-DUPLICATE THE Mapping.txt FILE
REM THE DE-DUPLICATED FILE IS STORED AS new.txt

set MapFile=Mapping.txt
set ReplaceFile=New.txt

del %ReplaceFile%
::DelDupeText.bat
rem https://groups.google.com/forum/#!topic/alt.msdos.batch.nt/sj8IUhMOq6o
setLocal EnableDelayedExpansion
for /f "tokens=1,2 delims=," %%a in (%MapFile%) do (
set str=%%a
rem Ref: http://www.dostips.com/DtTipsStringManipulation.php#Snippets.RightString
set str=!str:~-9!
set str2=%%a
set str3=%%a,%%b

find /i ^"!str!^" %MapFile%
find /i ^"!str!^" %ReplaceFile%
if errorlevel 1 echo !str3!>>%ReplaceFile%
)
ENDLOCAL

ধন্যবাদ!


ব্যাচের স্ক্রিপ্টটি কেবল ফাইল-অনুলিপি ছাড়া কিছুই করে না - এছাড়াও: আপনি নিজেকে কেন ধন্যবাদ দিচ্ছেন?
বিশেষায়িত করুন

আসল অনুরোধটি ছিল একটি ব্যাচ স্ক্রিপ্ট ব্যবহার করে এবং পছন্দসই অন্তর্নির্মিত ফাংশন সহ একটি পাঠ্য ফাইলে "বার" দিয়ে "এফওও" প্রতিস্থাপন করা। আমি যদি কিছু পেয়েছি তবে গুগল গ্রুপ পোস্টটি আমি খুঁজে পেয়েছি যা দুর্দান্ত কাজ করে এবং আমরা এখনও এটি ব্যবহার করি। এছাড়াও, পোস্টগুলি এবং এর মতো প্রতিক্রিয়াগুলিও রাস্তায় নেমে আসা ব্যবহারকারীদের জন্য সহায়ক হিসাবে দেখা। আমি ফাইল অনুলিপি সম্পর্কে আপনার মন্তব্য দেখতে ব্যর্থ হয়েছি .. অবশ্যই, এটি একটি ফাইলের বিষয়বস্তু নিয়ে যায় এবং ফলাফলটিকে প্রতিধ্বনিত করে অন্য ফাইলে, তবে তথ্যের উপর ভিত্তি করে, এটি প্রয়োজনীয় তথ্য ছাঁটাই করে এবং বিশ্লেষণ করে। আমি প্রথমে চেষ্টা করে দেখার পরামর্শ দেব। ;)
লেপটোনেটর

এটির মূলত একটি ফাইল-অনুলিপি সরঞ্জাম যা দুটি স্ট্যাটিক স্ট্রিংকে প্রতিস্থাপন করে - আপনি কমপক্ষে সেখানে দুটি ভেরিয়েবল স্থাপন করতে পারতেন যাতে যারা এটি চেষ্টা করতে চান তারা প্রকৃতপক্ষে এটি ব্যবহার করতে সক্ষম হওয়ার জন্য বাক্য গঠনটি বুঝতে হবে না - এছাড়াও: ইন্টারনেটে অনুমানগুলি প্রায় সর্বদা সম্পূর্ণ ভুল। মনে রাখবেন, যে.
বিশিষ্ট

4
@ স্পেশালিজট - দয়া করে ... আমি শব্দার্থবিজ্ঞানের বিতর্ক করতে এখানে আসছি না। আপনি যদি চান, আমরা কি এই অফলাইনে চ্যাট রুমে নিতে পারি।
লেপটোনেটর

2
আমার মতে, এই মূল প্রশ্ন উত্তর। আমি সেটআপ চলাকালীন কোনও পরিষেবার জন্য প্রাথমিক ফাইলগুলি কনফিগার করার জন্য এই টিপটি ব্যবহার করব এবং আমি পাওয়ারশেল সক্ষম করতে চাইব না, বা আমার সার্ভারে স্ক্রিপ্টিং ইঞ্জিনটি চালানোর অনুমতি দেব না। প্রায়শই উইন্ডোজ সম্পর্কিত প্রশ্নগুলির উত্তরগুলি, আশেপাশে একটি "পিসি" দৃষ্টিভঙ্গি থাকায় "সেখান থেকে এই গিজমো ইনস্টল করুন" দিয়ে শুরু করুন।
মাইকো

15

আপনি যখন উইন্ডোজে গিটের সাথে কাজ করেন তখন কেবল ফায়ার আপ করুনgit-bash এবং ব্যবহার করুন sed। অথবা, উইন্ডোজ 10 ব্যবহার করার সময়, "উইন্ডোজে উবুন্টুতে ব্যাশ" (লিনাক্স সাবসিস্টেম থেকে) শুরু করুন এবং ব্যবহার করুনsed

এটি একটি স্ট্রিম সম্পাদক, তবে নিম্নলিখিত কমান্ডটি ব্যবহার করে সরাসরি ফাইলগুলি সম্পাদনা করতে পারে:

sed -i -e 's/foo/bar/g' filename
  • -i ফাইলনেমের জায়গায় সম্পাদনা করতে বিকল্পটি ব্যবহৃত হয়।
  • -e বিকল্পটি চালানোর জন্য একটি কমান্ড নির্দেশ করে।
    • s"বার" দিয়ে পাওয়া এক্সপ্রেশন "ফু" gপ্রতিস্থাপন করতে ব্যবহৃত হয় এবং কোনও পাওয়া মিলগুলি প্রতিস্থাপন করতে ব্যবহৃত হয়।

এরন দ্বারা নোট:

আপনি যদি কেবল গিট সংগ্রহস্থলের সংস্করণযুক্ত ফাইলগুলিতে একটি স্ট্রিং প্রতিস্থাপন করতে চান তবে আপনি ব্যবহার করতে পারেন:

git ls-files <eventual subfolders & filters> | xargs sed -i -e 's/foo/bar/g'

যা আশ্চর্য কাজ করে।


1
মনে রাখবেন যে আপনি যদি সত্যই এই গিটার সংগ্রহস্থলে পুনরায় নামকরণ করেন এবং কেবল সংস্করণযুক্ত ফাইলগুলিতে প্রতিস্থাপন করতে চান তবে আপনি এটি করতে চাইতে পারেন: git ls-files <eventual subfolders & filters> | xargs sed -i -e 's/foo/bar/g'যা বিস্ময়ের কাজ করে।
16:58

13

আমি এখানে বিদ্যমান কয়েকটি উত্তর দিয়ে ঘুরেছি এবং আমার উন্নত সমাধানটিকে পছন্দ করি ...

type test.txt | powershell -Command "$input | ForEach-Object { $_ -replace \"foo\", \"bar\" }"

অথবা আপনি যদি আবার কোনও ফাইলের আউটপুট সংরক্ষণ করতে চান ...

type test.txt | powershell -Command "$input | ForEach-Object { $_ -replace \"foo\", \"bar\" }" > outputFile.txt

এর সুবিধা হ'ল আপনি যে কোনও প্রোগ্রাম থেকে আউটপুট পাইপ করতে পারেন। এটির সাথেও নিয়মিত এক্সপ্রেশন ব্যবহার করা সন্ধান করবে। সহজে ব্যবহারের জন্য এটিকে কীভাবে বিএটি ফাইল তৈরি করবেন তা নিয়ে কাজ করতে পারেনি ... :-(


3
এটি একটি ভাল সমাধান। দুর্ভাগ্যক্রমে, type80 টিরও বেশি অক্ষরের চেয়ে বেশি লাইন মোড়ানোর অর্থ ব্যবহার । কি যে ব্যথা.
sirank

12

আমি পার্ল ব্যবহার করেছি এবং এটি দুর্দান্তভাবে কাজ করে।

perl -pi.orig -e "s/<textToReplace>/<textToReplaceWith>/g;" <fileName>

.orig হ'ল এটি এক্সটেনশন যা এটি মূল ফাইলটিতে সংযোজন করবে

অনেকগুলি ফাইলের জন্য যেমন * .html মিলছে

for %x in (<filePattern>) do perl -pi.orig -e "s/<textToReplace>/<textToReplaceWith>/g;" %x

এটি সহজ সমাধান +1, যখন sh থেকে ব্যাটে রূপান্তরিত হয়, কেবল এটির sedসাথে প্রতিস্থাপন করুন perl -pi.backup -eএবং এটির প্রশংসা করুন :)
Yann39

11

সাথে replacer.bat

1) e?এমন বিকল্পের সাথে যা \n\rইউনিকোড সিকোয়েন্সগুলির মতো বিশেষ চরিত্রের ক্রমগুলি মূল্যায়ন করবে । এই ক্ষেত্রে উদ্ধৃত "Foo"এবং প্রতিস্থাপন করবে "Bar":

call replacer.bat "e?C:\content.txt" "\u0022Foo\u0022" "\u0022Bar\u0022"

2) সোজাভাবে প্রতিস্থাপন যেখানে Fooএবং Barকোট করা হয় না।

call replacer.bat "C:\content.txt" "Foo" "Bar"

এটা আমার পক্ষে কাজ করছে না আপনি কিভাবে এটি চালান? আমি ত্রুটিটি পেয়েছি 'বদলি_ইনকনফিগ.ব্যাট' কোনও অভ্যন্তরীণ বা বাহ্যিক কমান্ড, অপারেবল প্রোগ্রাম বা ব্যাচ ফাইল হিসাবে স্বীকৃত নয়।
ফ্রেনকিবি

@ ফ্রেঙ্কিবি - এটি একই ডিরেক্টরিতে থাকা উচিত যেখানে আপনি এটি ডাকছেন বা পথে চলছেন
ss64.com/nt/path.html

আমি তিনটি ফাইল একই ডিরেক্টরিতে পেয়েছি।
ফ্রেনকিবি

9

এখানে একটি সমাধান যা আমি উইন এক্সপি-তে কাজ করে দেখেছি। আমার চলমান ব্যাচ ফাইলে আমি নিম্নলিখিতগুলি অন্তর্ভুক্ত করেছি:

set value=new_value

:: Setup initial configuration
:: I use && as the delimiter in the file because it should not exist, thereby giving me the whole line
::
echo --> Setting configuration and properties.
for /f "tokens=* delims=&&" %%a in (config\config.txt) do ( 
  call replace.bat "%%a" _KEY_ %value% config\temp.txt 
)
del config\config.txt
rename config\temp.txt config.txt

replace.batফাইল নিচে হয়। আমি একই ব্যাচ ফাইলের মধ্যে সেই ফাংশনটি অন্তর্ভুক্ত করার কোনও উপায় খুঁজে পাইনি, কারণ %%aভেরিয়েবল সর্বদা লুপের জন্য শেষ মান দেয় বলে মনে হয়।

replace.bat:

@echo off

:: This ensures the parameters are resolved prior to the internal variable
::
SetLocal EnableDelayedExpansion

:: Replaces Key Variables
::
:: Parameters:
:: %1  = Line to search for replacement
:: %2  = Key to replace
:: %3  = Value to replace key with
:: %4  = File in which to write the replacement
::

:: Read in line without the surrounding double quotes (use ~)
::
set line=%~1

:: Write line to specified file, replacing key (%2) with value (%3)
::
echo !line:%2=%3! >> %4

:: Restore delayed expansion
::
EndLocal

1
দুঃখের বিষয় এটি খালি রেখাগুলিও এড়িয়ে যায়। কমান্ডের জন্য {{এর একটি বৈশিষ্ট্য
জন রোচা

7

কটাক্ষপাত আছে কোন cmd.exe জন্য ইউটিলিটি মত sed যা জিজ্ঞাসা উইন্ডোজ অধীনে সমতুল্য sed জন্য, পাশাপাশি এই প্রশ্নের আবেদন করতে হবে। নির্বাহী সারসংক্ষেপ:

  • এটি ব্যাচ ফাইলে করা যেতে পারে তবে এটি সুন্দর নয়
  • প্রচুর উপলভ্য তৃতীয় পক্ষের এক্সিকিউটেবল যা আপনার পক্ষে এটি করবে, যদি আপনার কাছে ইনস্টল করার বিলাসিতা থাকে বা কেবলমাত্র কোনও এক্সপি উপর অনুলিপি করা হয়
  • ভিবিএস স্ক্রিপ্ট বা অনুরূপভাবে করা যেতে পারে যদি আপনার কোনও পরিবর্তন ইত্যাদি ছাড়াই উইন্ডোজ বাক্সে চালাতে সক্ষম কিছু প্রয়োজন হয়

4

কিছুটা দেরি হতে পারে তবে আমি প্রায়শই অনুরূপ জিনিস খুঁজছি, যেহেতু আমি সফ্টওয়্যার অনুমোদিত হওয়ার যন্ত্রণাটি পেতে চাই না।

তবে আপনি সাধারণত ফর্ম বিবৃতিটি বিভিন্ন রূপে ব্যবহার করেন। কেউ একটি দরকারী ব্যাচ ফাইল তৈরি করেছেন যা অনুসন্ধান এবং প্রতিস্থাপন করে। এখানে দেখুন । প্রদত্ত ব্যাচ ফাইলের সীমাবদ্ধতাগুলি বোঝা গুরুত্বপূর্ণ। এই কারণে আমি উত্স কোডটি এই উত্তরে অনুলিপি করি না।


4

দুটি ব্যাচের ফাইল যা search and replaceফাংশন সরবরাহ করে স্ট্যাক ওভারফ্লো সদস্যরা dbenhamএবং উইন্ডোজ aaciniব্যবহার করে লিখেছেন native built-in jscript

এগুলি উভয়ই robustএবং very swift with large filesপ্লেইন ব্যাচের স্ক্রিপ্টিংয়ের সাথে তুলনা করা হয় এবং simplerপাঠ্যের মূল প্রতিস্থাপনের জন্য ব্যবহার করতে হয়। তাদের দুজনেরই Windows regular expressionপ্যাটার্ন মিল রয়েছে।

  1. এই sed-likeসহায়ক ব্যাচের ফাইলটিকে repl.batডাবেনহ্যাম দ্বারা ডাকা হয়।

    Lআক্ষরিক সুইচ ব্যবহার করে উদাহরণ :

    echo This is FOO here|repl "FOO" "BAR" L
    echo and with a file:
    type "file.txt" |repl "FOO" "BAR" L >"newfile.txt"
    
  2. এই grep-likeসহায়ক ব্যাচের ফাইলটি বলা হয়findrepl.bat (আছিনী দ্বারা) হয়।

    নিয়মিত এক্সপ্রেশন সক্রিয় রয়েছে এমন উদাহরণ:

    echo This is FOO here|findrepl "FOO" "BAR" 
    echo and with a file:
    type "file.txt" |findrepl "FOO" "BAR" >"newfile.txt"
    

উভয়ই শক্তিশালী সিস্টেম-ব্যাপী ইউটিলিটি হয়ে ওঠে when placed in a folder that is on the path , বা ব্যাচ ফাইলের সাথে একই ফোল্ডারে বা সেমিডি প্রম্পট থেকে ব্যবহার করা যেতে পারে।

তাদের উভয়ের case-insensitiveসুইচ এবং আরও অনেকগুলি ফাংশন রয়েছে।


3

পাওয়ার শেল কমান্ড একটি কবজ মত কাজ করে

(
test.txt | ForEach-Object { $_ -replace "foo", "bar" } | Set-Content test2.txt
)

3

সবেমাত্র একটি অনুরূপ সমস্যার মুখোমুখি হয়েছিল - "ফাইলগুলির মধ্যে পাঠ্য অনুসন্ধান করুন এবং প্রতিস্থাপন করুন", তবে ব্যতিক্রম ছাড়া যে ফাইলের নাম এবং সন্ধান / পুনরাবৃত্তি উভয়ের জন্যই আমাকে রেজেেক্স ব্যবহার করা প্রয়োজন। কারণ আমি পাওয়ারশেলের সাথে পরিচিত নই এবং পরবর্তী অনুসন্ধানগুলির জন্য আমার অনুসন্ধানগুলি সংরক্ষণ করতে চাই আমার আরও কিছু "ব্যবহারকারী বান্ধব" দরকার (এটির জিওআই থাকলে পছন্দনীয়)।

সুতরাং, গুগলিংয়ের সময় :) আমি একটি দুর্দান্ত সরঞ্জাম পেয়েছি - ফার (অনুসন্ধান এবং প্রতিস্থাপন) গুগলিংয়ের (ফার্ট নয়)।

এই ছোট্ট প্রোগ্রামটিতে ফাইলের নামগুলি এবং ফাইলগুলির মধ্যে অনুসন্ধানের জন্য দুর্দান্ত জিইউআই এবং সমর্থন রেগেক্স রয়েছে। কেবল বিচ্ছিন্নতা হ'ল আপনি যদি আপনার সেটিংস সংরক্ষণ করতে চান তবে আপনাকে প্রশাসক হিসাবে প্রোগ্রামটি চালাতে হবে (কমপক্ষে উইন 7 এ)।


এটা তোলে 2010 @VonC থেকে উত্তর হিসাবে একই উত্তর এই থ্রেড
Jeb

@ জেব আমি উল্লেখ করেছি যে ফার ফার্ট নয় - প্রায় অভিন্ন নামের দুটি ভিন্ন প্রোগ্রাম। এফএআর-এর জিইউআই রয়েছে এবং তারা রেগেক্সের সাথে কাজ করতে পারে, যখন এই থ্রেডের নীচে দেওয়া মন্তব্যে লোকেরা উল্লেখ করেছেন যে ফার্ট রেজেক্সকে সমর্থন করে না।
ম্যাডকর্প

3

আমি ব্যবহার করতে পছন্দ করি sed উইন 32 এর জন্য জিএনইউ ইউটিলিটিগুলি থেকে , নিম্নলিখিতগুলি উল্লেখ করা দরকার

  • একক উদ্ধৃতি ''উইন্ডোতে কাজ করবে না, ""পরিবর্তে ব্যবহার করুন
  • sed -iউইন্ডোতে কাজ করবে না, এটির জন্য ফাইলের অদলবদল প্রয়োজন

সুতরাং sedউইন্ডোতে কোনও ফাইলের পাঠ্য সন্ধান এবং প্রতিস্থাপনের কার্য কোডটি নীচের মত

sed -e "s/foo/bar/g" test.txt > tmp.txt && mv tmp.txt test.txt

2
উইন্ডোজ ব্যবহারকারীরা তত্ক্ষণাত্ ফাইল অদলবদল করার পূর্বে: সেডের নতুন সংস্করণগুলি ইন-প্লেস সম্পাদনা সমর্থন করে -i! যদি আপনার সেড সংস্করণটি করে, তবে এই উত্তরটি থেকে কমান্ডটি পরীক্ষা করুন: stackoverflow.com/a/33762001/2492801
বেনিয়ামিন বিহেলার

2

এটি এমন একটি জিনিস যা ব্যাচের স্ক্রিপ্টিং কেবল ভাল করে না।

স্ক্রিপ্ট morechilli কিছু ফাইল জন্য ইচ্ছা কাজ লিঙ্ক, কিন্তু দুর্ভাগ্যবশত এটা যার যেমন পাইপ এবং অ্যামপারসেন্ট যেমন অক্ষর উপর শ্বাসরোধ হবে।

ভিবিএস স্ক্রিপ্ট এই কাজের জন্য একটি ভাল অন্তর্নির্মিত সরঞ্জাম। উদাহরণস্বরূপ এই নিবন্ধটি দেখুন: http://www.microsoft.com/technet/scriptcenter/resources/qanda/feb05/hey0208.mspx


2

@ রাচেল একটি দুর্দান্ত উত্তর দিয়েছেন তবে একটি পাওয়ার শেল $dataভেরিয়েবলের বিষয়বস্তু পড়তে এখানে এর বিভিন্নতা । তারপরে আপনি সহজেই কোনও আউটপুট ফাইলে লেখার আগে একাধিক বার সামগ্রী কন্ট্রোল করতে পারেন। .Bat ব্যাচ ফাইলগুলিতে কীভাবে মাল্টি-লাইনের মান দেওয়া হয় তা দেখুন।

@REM ASCII=7bit ascii(no bom), UTF8=with bom marker
set cmd=^
  $old = '\$Param1\$'; ^
  $new = 'Value1'; ^
  [string[]]$data = Get-Content 'datafile.txt'; ^
  $data = $data -replace $old, $new; ^
  out-file -InputObject $data -encoding UTF8 -filepath 'datafile.txt';
powershell -NoLogo -Noninteractive -InputFormat none -Command "%cmd%"

2

উইন্ডোজ 7+ এর জন্য .bat- এ পাওয়ারশেল ব্যবহার করুন

এনকোডিং utf8 alচ্ছিক, ওয়েবসাইটগুলির জন্য ভাল

@echo off
set ffile='myfile.txt'
set fold='FOO'
set fnew='BAR'
powershell -Command "(gc %ffile%) -replace %fold%, %fnew% | Out-File %ffile% -encoding utf8"

1

সাইগউইন ডাউনলোড করুন (ফ্রি) এবং উইন্ডোজ কমান্ড লাইনে ইউনিক্সের মতো কমান্ড ব্যবহার করুন।

আপনার সেরা বাজি: সেড


10
সাইগউইন দুষ্ট। এটি ইনস্টল করবেন না। নিচে উল্লিখিত আরও ভাল ইউনিক্স ইউটিস ব্যবহার করুন।
zedoo

24
এটি সম্পর্কে এত খারাপ কি?
জেএম

@jm হতে পারে কারণ আপনি যখনই চান একটি একক এক্সিকিউটেবল ব্যবহারের পরিবর্তে আপনাকে পুরো জিনিসটি একসাথে ইনস্টল করতে হবে।
অ্যান্ড্রি

পাওয়ারশেল ব্যবহারের চেয়ে আরও ভাল, এটি উইন্ডোজটিতে আসলে অন্তর্নির্মিত।
প্রেজা 8

0

তাও দেখতে পারেন এ প্রতিস্থাপন এবং ReplaceFilter সরঞ্জাম https://zoomicon.github.io/tranXform/ (উত্স অন্তর্ভুক্ত) । দ্বিতীয়টি একটি ফিল্টার।

যে সরঞ্জামগুলি ফাইলগুলিতে স্ট্রিং প্রতিস্থাপন করে তা ভিবিএস স্ক্রিপ্টে রয়েছে (পুরানো উইন্ডোজ সংস্করণগুলিতে চালনার জন্য উইন্ডোজ স্ক্রিপ্ট হোস্ট [ডাব্লুএসএইচ] প্রয়োজন)

আপনি সর্বশেষে ডেলফির (বা ফ্রিপ্যাসাল / লাজারাসের সাথে) পুনঃসংযোগ না করা হলে ফিল্টার সম্ভবত ইউনিকোডের সাথে কাজ করছে না unless


-5

ভিজ্যুয়াল সি ++ এর অধীনে কোড করার সময় আমি বেশ কয়েকবার এই সমস্যার মুখোমুখি হয়েছি। আপনার যদি এটি থাকে তবে আপনি ভিজুয়াল স্টুডিওটি ইউটিলিটি সন্ধান এবং প্রতিস্থাপন ব্যবহার করতে পারেন। এটি আপনাকে একটি ফোল্ডার নির্বাচন করতে এবং সেই ফোল্ডারের যে কোনও ফাইলের বিষয়বস্তু আপনার পছন্দ মতো অন্য কোনও পাঠ্যের সাথে প্রতিস্থাপন করতে দেয়।

ভিজ্যুয়াল স্টুডিওর অধীনে: সম্পাদনা -> সন্ধান করুন এবং প্রতিস্থাপন খোলা কথোপকথনে আপনার ফোল্ডারটি নির্বাচন করুন এবং "কী সন্ধান করুন" এবং "এর সাথে প্রতিস্থাপন করুন" বাক্সগুলি পূরণ করুন। আশা করি এটি সহায়ক হবে।


2
নাদজিব, আপনার উত্তরটি ব্যবহারকারীকে সাহায্য করে না কারণ তারা ধরে নিচ্ছে যে তারা এমন কোনও সফ্টওয়্যার ব্যবহার করছে যা তারা উল্লেখ করে না। দয়া করে এমন একটি বিকল্প প্রস্তাব করুন যার জন্য সফ্টওয়্যারটির প্রয়োজন নেই।
আইব্রিয়ান

@ অ্যাব্রিয়ান উত্তরটি কোনও ব্যবহার নয়, তবে সেই কারণে নয়, এটি প্রবেশের পয়েন্টটি ভুল।
পল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.