গ্রীপ -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.