গ্রীপ -f এর সমান পাওয়ারশেল


157

আমি পাওয়ারশেলের সমতুল্য সন্ধান করছি grep --file=filename। যদি আপনি না জানেন তবে grepফাইলের নাম একটি পাঠ্য ফাইল যেখানে প্রতিটি লাইনে নিয়মিত প্রকাশের প্যাটার্ন থাকে যা আপনি মেলাতে চান।

সম্ভবত আমি স্পষ্ট কিছু মিস করছি, তবে Select-Stringএই বিকল্পটি বলে মনে হচ্ছে না।

উত্তর:


178

-Patternমাপদণ্ড Select-Stringসমর্থন প্যাটার্নের একটি অ্যারের। সুতরাং আপনি যেটির সন্ধান করছেন তা হ'ল:

Get-Content .\doc.txt | Select-String -Pattern (Get-Content .\regex.txt)

এটি doc.txtপ্রতিটি রেগেক্স (প্রতিটি লাইনে একটি) ব্যবহার করে টেক্সটফাইলে অনুসন্ধান করেregex.txt


6
এছাড়াও, পাওয়ারশেল ট্যাব সমাপ্তি কমান্ডগুলি যথাযথভাবে মূলধন করে দেবে, সুতরাং ইনপুট করা কঠিন নয়।
— জুন

3
@ জুন কয়েক বছর দেরী করেছেন, তবে আমি যুক্ত করব যে পাওয়ারশেল ক্ষেত্রে সংবেদনশীল তাই কমান্ডের মূলধন কোনও সমস্যা নয়।
— Dee দেখুন

1
@ ভ্যাচ অবশ্যই - আমার মতে উপরের আমার মন্তব্যটি অন্য মন্তব্যের জবাব, তবে মনে হয় মন্তব্যটি আর চলে গেছে।
— জুন

85
PS) new-alias grep findstr
PS) C:\WINDOWS> ls | grep -I -N exe

105:-a---        2006-11-02     13:34      49680 twunk_16.exe
106:-a---        2006-11-02     13:34      31232 twunk_32.exe
109:-a---        2006-09-18     23:43     256192 winhelp.exe
110:-a---        2006-11-02     10:45       9216 winhlp32.exe

PS) grep /?

17
এটি এত ভোট কীভাবে পেল তা আমি কখনই বুঝতে পারি নি। এটি এমনকি প্রশ্নের উত্তর দেয় না ..
— ফ্রয়েড এফ।

18
আমি এই উত্তর সম্পর্কে যা পছন্দ করি তা লিনাক্সের findstrমতো সবচেয়ে বেশি কাজ grepকরে। Select-Stringঅবজেক্টের সাথে কাজ করার জন্য দুর্দান্ত তবে কখনও কখনও আপনি কেবল স্ট্রিংয়ের সাথে মিল রাখতে চান।
— এলিয়জাহ ডাব্লু। গাগেন

7
এটি লক্ষণীয় যে findstrপাওয়ারশেলের স্থানীয় নয়, কমান্ড প্রম্পট।
— আনিশপেটেল

1
এই ফাইন্ডস্ট্র্ট কমান্ডটি আমার কাছে ইতিমধ্যে উপলব্ধ ছিল এবং এটি ইউনিক্স জিআরইপির মতো কাজ করেছিল worked
— লেনন

37

আমি গ্রেপের সাথে পরিচিত নই তবে সিলেক্ট-স্ট্রিংয়ের সাথে আপনি করতে পারেন:

Get-ChildItem filename.txt | Select-String -Pattern <regexPattern>

আপনি গেট-কনটেন্টের সাহায্যে এটি করতে পারেন:

(Get-Content filename.txt) -match 'pattern'

4
এটি উদাহরণস্বরূপ প্রসারিত dir *.cs -Recurse | sls "TODO" | select -Unique "Path"। চমত্কার পয়েন্টারের জন্য Thx।
— জেরোইন

4

সুতরাং আমি এই লিঙ্কটিতে একটি দুর্দান্ত উত্তর পেয়েছি: https://www.thomasmaurer.ch/2011/03/powershell-search-for-string-or-grep-for-powershell/

তবে মূলত তা হ'ল:

Select-String -Path "C:\file\Path\*.txt" -Pattern "^Enter REGEX Here$"

এটি একটি ডিরেক্টরি ফাইল অনুসন্ধান দেয় (* বা আপনি কেবল একটি ফাইল নির্দিষ্ট করতে পারেন) এবং একটি ফাইল-বিষয়বস্তু অনুসন্ধান সমস্ত গ্রা্যাপের মতো পাওয়ারশেলের এক লাইনেই অনুসন্ধান করুন। আউটপুট অনুরূপ হবে:

doc.txt:31: Enter REGEX Here
HelloWorld.txt:13: Enter REGEX Here

1
তিনি কোনও ফাইল থেকে প্যাটার্নটি লোড করতে চান।
— ব্রায়ান গর্ডন

2

এই প্রশ্নের ইতিমধ্যে একটি উত্তর রয়েছে, তবে আমি কেবল যুক্ত করতে চাই যে উইন্ডোজটিতে লিনাক্স ডাব্লুএসএল এর জন্য উইন্ডোজ সাবসিস্টেম রয়েছে ।

সুতরাং উদাহরণস্বরূপ, যদি আপনি যাচাই করতে চান যে আপনার কাছে ইলাসিসার্ক নামের একটি পরিষেবা রয়েছে যা স্থিতি চলমান আছে আপনি পাওয়ারশেলে নীচে স্নিপেটের মতো কিছু করতে পারেন

net start | grep Elasticsearch


2

পাওয়ারশেলের ফাইলগুলিতে টেক্সট সন্ধান করার ক্ষেত্রে আমার একই সমস্যা ছিল। আমি নিম্নলিখিতটি ব্যবহার করেছি - যতটা সম্ভব লিনাক্স পরিবেশের কাছাকাছি থাকার জন্য।

আশা করি এটি কারও সহায়তা করে:

শক্তির উৎস:

PS) new-alias grep findstr
PS) ls -r *.txt | cat | grep "some random string"

ব্যাখ্যা:

ls       - lists all files
-r       - recursively (in all files and folders and subfolders)
*.txt    - only .txt files
|        - pipe the (ls) results to next command (cat)
cat      - show contents of files comming from (ls)
|        - pipe the (cat) results to next command (grep)
grep     - search contents from (cat) for "some random string" (alias to findstr)

হ্যাঁ, এটি পাশাপাশি কাজ করে:

PS) ls -r *.txt | cat | findstr "some random string"

0

তবে নির্বাচন-স্ট্রিংয়ের কাছে এই বিকল্পটি মনে হয় না।

সঠিক। পাওয়ারশেল * নিক্স শেলসের টুলসেটের ক্লোন নয় ।

তবে এটির মতো নিজের মতো করে তৈরি করা শক্ত নয়:

$regexes = Get-Content RegexFile.txt | 
           Foreach-Object { new-object System.Text.RegularExpressions.Regex $_ }

$fileList | Get-Content | Where-Object {
  foreach ($r in $regexes) {
    if ($r.IsMatch($_)) {
      $true
      break
    }
  }
  $false
}

এটি একটি খারাপ উত্তর। Select-String -Pattern somestringঅনেক ক্লিনার
— কলব ক্যানিয়ন

0

হতে পারে?

[regex]$regex = (get-content <regex file> |
foreach {
          '(?:{0})' -f $_
        }) -join '|'

Get-Content <filespec> -ReadCount 10000 |
 foreach {
           if ($_ -match $regex)
             {
              $true
              break
             }
         }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.