উইন্ডোজ পাওয়ারশেলের সাথে আংশিক স্ট্রিং ম্যাচের উপর ভিত্তি করে একটি পাঠ্য ফাইলে সম্পূর্ণ লাইনগুলি মোছা


22

সুতরাং আমার কাছে বেশ কয়েকটি বড় টেক্সট ফাইল রয়েছে যার মাধ্যমে আমার বাছাই করতে হবে এবং প্রদত্ত কীওয়ার্ড থাকা লাইনের সমস্ত উপস্থিতি সরিয়ে ফেলতে হবে। সুতরাং মূলত, যদি আমার এই লাইন থাকে:

এটি একটি পরীক্ষা নয়
এটি একটি পরীক্ষা
সম্ভবত একটি পরীক্ষা
অবশ্যই পরীক্ষা নয়

এবং আমি স্ক্রিপ্টটি 'না' দিয়ে চালাচ্ছি, আমার সম্পূর্ণ লাইন 1 এবং 4 মুছতে হবে।

আমি চেষ্টা করে যাচ্ছি:

PS C:\Users\Admin> (Get-Content "D:\Logs\co2.txt") | 
Foreach-Object {$_ -replace "3*Program*", ""} | 
Set-Content "D:\Logs\co2.txt"

তবে এটি কেবলমাত্র 'প্রোগ্রাম' প্রতিস্থাপন করে পুরো লাইনটি নয়।

উত্তর:


25

আমি এখানে কি করব:

Get-Content .\in.txt | Where-Object {$_ -notmatch 'not'} | Set-Content out.txt

স্নার্কের লাইনটি একই কাজ করে তবে এটি ফাইলের সমস্তটিকে একটি অ্যারেতে লোড করার সাথে শুরু করে, যা বড় ফাইল মেমরি অনুসারে সমস্যাযুক্ত হতে পারে।


আমি আপনাকে পরামর্শ দেব যে আপনি আউট-ফাইলের পরিবর্তে সেট-সামগ্রী ব্যবহার করুন, কাঁচা ডেটাতে পূর্বের ডিলগুলি এবং স্ট্রিং বা ফর্ম্যাট অবজেক্টগুলি কাটাবেন না।
জেসনমারেচার

@ জেসনম্যাচার আপনি কি ব্যবহার করে উদাহরণ পোস্ট করতে পারেন Set-Content? আমি বিশ্বাস করি না যে Set-Contentএটি একটি ড্রপ-ইন প্রতিস্থাপন Out-File
আইয়েন স্যামুয়েল ম্যাকলিন বয়স্ক

Get-Content .\in.txt | Where-Object {$_ -notmatch 'not'} | Set-Content out.txt আউট-ফাইল মূলত সেট-সামগ্রী, তবে এটি সাধারণ স্ট্রিং রূপান্তর পরিবর্তে ডিফল্ট ফর্ম্যাটিংয়ের মাধ্যমে ইনপুট চালায়।
জেসনমারচার

আমার ঠিক একই সমস্যা ছিল এবং আপনার উত্তরটি আমার প্রয়োজনের 99%। চূড়ান্ত সমস্যাটি হ'ল আমি একটি লুপে একটি $ ভেরিয়েবল (আপনার উদাহরণে 'নয়' এর পরিবর্তে) দিয়ে কমান্ডটি চালাচ্ছি। আমি যদি স্ট্রিংকে হার্ড কোড করি তবে এটি পুরোপুরি কাজ করে; তবে আমি যদি ভেরিয়েবল ব্যবহার করি তবে এটি কিছুই করে না। কোন ধারণা কেন? আমি উভয়ই বেয়ার ভেরিয়েবল চেষ্টা করে দেখেছি এবং এটিকে "উদ্ধৃতি"
স্টিফেন আর

7

এটি কাজ করবে:

(Get-Content "D:\Logs\co2.txt") -notmatch "not" | Out-File "D:\Logs\co2.txt"

এটি ঠিক দ্বিতীয় নামে দুটি ফাইলের মধ্যে একটি লাইন দেয়।

সংশোধন: এটি 'সত্য' নিয়ে গঠিত দ্বিতীয় ফাইলটিতে কেবল একটি একক লাইন দেয়। এটি কি "ফরচ-অবজেক্ট missing $ _" হারিয়েছে তাই প্রতি লাইনে একবার চালিত হয়? সম্পাদনা করুন: আসলে এটি এখন অপ্রাসঙ্গিক, এটি ফাইলটি মুছে ফেলার আশা করেছিলাম। যাইহোক সাহায্যের জন্য আপনাকে ধন্যবাদ, তবে আমি এখনও আগ্রহী যে সঠিক আদেশটি কী হবে যাতে ভবিষ্যতে আমি এটি করতে পারি?

1
এটি উপরে আপনার 4 টি পরীক্ষা লাইন নিয়ে আমার জন্য কাজ করে।
Snark

2
এটি কখনই আসল ফাইলটি ওভাররাইট করতে পারে না!
ব্যবহারকারী 33788

3
সম্মত, তবে উত্তরটি আরও সহজ করতে আমি মূল পোস্টার হিসাবে ব্যবহৃত ফাইলের নামগুলি ব্যবহার করেছি। তিনি ইনপুট এবং আউটপুট উভয়ের জন্যই co2.txt ব্যবহার করেছিলেন।
স্নার্ক

0

আপনি নোটম্যাচ বিকল্পের সাহায্যে 'সিলেক্ট-স্ট্রিং' ব্যবহার করতে পারেন:

Select-String 'not' .\input.txt -notmatch | % {$_.Line} | set-content output.txt

0

আমার কেবল এই কাজ করা দরকার এবং নিম্নলিখিতগুলি নিয়ে এসেছি:

$InServerName = 'SomeServerNameorIPAddress'
$InFilePath = '\Sharename\SomePath\'
$InFileName = 'Filename.ext'

$OutServerName = 'SomeServerNameorIPAddress'
$OutFilePath = '\Sharename\SomePath\'
$OutFileName = 'Filename.out'

$InFile = -join('\\',$InServerName,$InFilePath,$InFilename)
$OutFile = -join('\\',$OutServerName,$OutFilePath,$OutFilename)
$FindStr = 'some string to match on'
$CompareStr = [scriptblock]::Create($FindStr)
$CompareStr
Get-Content $InFile | Where-Object {$_ -notmatch $CompareStr} | Set-Content $OutFile
Get-Content $OutFile

স্ক্রিপ্ট ব্লক (কোঁকড়া ধনুর্বন্ধনী দ্বারা চিহ্নিত হিসাবে) ব্যবহার করে 'হুড়ো-অবজেক্ট' কীটি হ'ল স্ক্রিপ্ট ব্লক তৈরির ইভেন্টে ভেরিয়েবল ঘোষণার প্রয়োজন হয়, সুতরাং

$CompareStr = [scriptblock]::Create($FindStr)

লাইন।

এটিকে কাঠামোগত করে, কেউ একটি ফাংশন তৈরি করতে পারে, আংশিকভাবে ম্যাচ করার জন্য এটি একটি পাঠ্য স্ট্রিং পাস করতে পারে, পাস করা মানের সাথে স্ক্রিপ্ট ব্লক তৈরি করতে পারে এবং এটি সঠিকভাবে কাজ করতে পারে।

উপরের উত্তরগুলি ভেরিয়েবলের মধ্যে প্রতিস্থাপনের মানটি কীভাবে পাস করতে হবে তা সঠিকভাবে ব্যাখ্যা করে না।


আপনি কী ব্যাখ্যা করতে পারবেন (আরও স্পষ্টভাবে) এটি কীভাবে স্নারকের (আরও সংক্ষিপ্ত) উত্তর চেয়ে ভাল ? মন্তব্যে প্রতিক্রিয়া জানাতে দয়া করে; আপনার উত্তরটি আরও পরিষ্কার এবং আরও পরিপূর্ণ করতে সম্পাদনা করুন।
স্কট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.