Чи є аналогічна утиліта, яка grep
доступна в командному рядку Windows, чи є інструмент стороннього виробника для неї?
Чи є аналогічна утиліта, яка grep
доступна в командному рядку Windows, чи є інструмент стороннього виробника для неї?
Відповіді:
Існує інструмент командного рядка, який називається FINDSTR
всіма операційними системами Windows NT-класу (введіть FINDSTR /?
у вікно командного рядка для отримання додаткової інформації). Він не підтримує все grep
, але може бути достатньо для ваших потреб
netstat -n | FINDSTR 3389
PowerShell (входить як стандарт для Windows 7 / 2008R2, необов'язково для XP / 2003 / Vista / 2008), який включає select-string
командлет для цієї мети.
Grep для Windows від проекту GnuWin (2014-10-02: застаріла, дивіться коментарі нижче)
як було сказано, Findstr працює чудово. приклад:
C:> dir | findstr Windows
06.11.2013 21:55 Windows
Cygwin grep та багато іншого;)
Я також знайшов ще один спосіб використання функціональності GREP у Windows 7 і вище, без додаткового додатка для установки, а в старих системах можна використовувати встановлення Powershell.
У Powershell , користувач може використовувати Where-Object, він має досить вичерпний набір функцій, який забезпечує всю функціональність GREP плюс багато іншого.
Сподіваюся, що це допомагає.
Я здивований, що ніхто не згадав про FINDSTR . Я не grep poweruser, але findstr робить те, що мені потрібно для цього, фільтрує файли та stdin, маючи якусь примітивну підтримку регулярного виразів. Постачається з Windows і все таке. (Редагувати: ну хтось згадав findstr, я думаю, пізно)
GnuWin32 варто згадати, він надає нативну версію Win32 усіх стандартних інструментів Linux, включаючи grep, файл, sed, groff, indent тощо.
І постійно оновлюється, коли випускаються нові версії цих інструментів.
У Windows я використовую Far Manager для пошуку файлів. Ліцензія BSD, працює в консолі, економить час на введення параметрів cmdline. Ось його діалогове вікно пошуку, на яке посилається Alt-F7.
Оновлення: Це не було правдою, коли питання було задано спочатку, але тепер Microsoft дозволяє встановити підсистему Windows для Linux , і тоді Windows запустить grep. У PowerShell запустіть:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Відмінна та дуже швидка утиліта пошуку файлів, агент Ransack , підтримує регулярний пошук виразів. Це насамперед утиліта GUI, але також доступний інтерфейс командного рядка.
Хоча технічно не grep і командний рядок, і Microsoft Visual Studio, і Notepad ++ мають дуже гарну функцію Find in Files з повною регулярною підтримкою виразів. Я часто користуюся ними, хоча в командному рядку також є версія greg CygWin.
Я додам мою 0,02 долара до цієї теми. dnGREP - це чудовий інструмент grep з відкритим кодом для Windows, який підтримує скасування, інтеграцію провідника Windows, пошук у PDF-файлах, блискавках, документах та купі інших матеріалів ...
Так, є лише одна програма для ПК з Windows, яка має надійний графічний інтерфейс, і це важливо для мене. Я працюю розробником і на кожному комп’ютері, який у мене було, перш за все встановіть програму XFind. Він створений у 1997 році і до цього часу версія 1.0 і до цього часу працює, і це найкраще. Часто мені потрібно шукати рядок у " .cs", " .aspx", " .sct" (файл коду форми Visual FoxPro) або просто " . *" І XFind сканує всі файли і показує мені файли, і ще одна чудова річ що ви можете подивитися, де у файлі є рядок. У XFind також є якийсь редактор. Якщо це двійковий файл, він покаже вам знайдений рядок. Спробуйте і використовуйте його назавжди, якщо ви такий розробник, як я.
Ви, очевидно, отримали багато різних рекомендацій.
Мій особистий вибір для безкоштовної, сторонньої утиліти: Агент Ransack
Agent Ransack Завантаження
Незважаючи на дещо заплутану назву, вона працює добре і може використовуватися різними способами пошуку файлів.
Щасти
все-в-одному зайняте поле містить grep / egrep / sed / awk та багато іншого
отримати його від:
Оновлення: більше не доступне - або кілька старих
Голий Греп приємно, якщо ви хочете GUI. Gnu grep корисний для CLI
Якщо ви не заперечуєте проти платного продукту, PowerGREP - мій особистий фаворит.
Нещодавно ми використовували PowerGREP для деяких досить просунутих масових операцій на тисячах файлів. Включення пошуку за допомогою регулярних виразів у вмісті PDF-файлів та зміна PDF-документів у великих масштабах.
Варто грошей, якщо ви хочете заощадити час від ручної праці. Ви можете спробувати, перш ніж купувати, я думаю.
Якщо вам доводиться використовувати голі Windows, то крім параметра Powershell, зазначеного вище, ви можете використовувати VBScript, який має гідну підтримку RegEx.
У MS також є пристойна сценарна область на Technet з безліччю прикладів для адміністраторів.
Минув час, коли я їх використовував, але Borland (Embarcadero зараз) включив греп командного рядка зі своїм компілятором C / C ++. Деякий час вони надавали свою версію 5.5 як безкоштовне завантаження після реєстрації.
Є комерційна утиліта grep, доступна від Oak Road Systems .
Я рекомендую PowerGrep
Мені довелося робити проект електронного відкриття кілька років тому. Я виявив, що fisdstr
були деякі обмеження, більшість особливо fisdstr врешті-решт не вдасться
сценарій повинен був шукати тисячі файлів, використовуючи кілька десятків пошукових термінів / фраз.
Grep Cygwin працював набагато краще , він не задихався часто, але в кінцевому підсумку я перейшов до PowerGrep, оскільки графічний інтерфейс значно полегшив визначити, коли і де він вийшов з ладу, а також було дуже легко редагувати в усіх умовах і виводити, що Я хотів. Зрештою, PowerGrep виявився найнадійнішим із цих трьох.
Я знаю, що це трохи стара тема, але ось ще одна річ, яку ви можете зробити. Я працюю над VM-розробником без доступу до Інтернету та досить обмеженого вільного місця на диску, тому я скористався встановленою на ньому Java.
Скомпілюйте невелику програму java, яка друкує відповідність регулярного виразу на консоль. Помістіть банку десь у вашій системі, створіть пакет для її виконання та додайте папку до вашої змінної PATH:
JGrep.java:
package com.jgrep;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class JGrep {
public static void main(String[] args) throws FileNotFoundException, IOException {
int printGroup = -1;
if (args.length < 2) {
System.out.println("Invalid arguments. Usage:");
System.out.println("jgrep [...-MODIFIERS] [PATTERN] [FILENAME]");
System.out.println("Available modifiers:");
System.out.println(" -printGroup - will print the given group only instead of the whole match. Eg: -printGroup=1");
System.out.println("Current arguments:");
for (int i = 0; i < args.length; i++) {
System.out.println("args[" + i + "]=" + args[i]);
}
return;
}
Pattern pattern = null;
String filename = args[args.length - 1];
String patternArg = args[args.length - 2];
pattern = Pattern.compile(patternArg);
int argCount = 2;
while (args.length - argCount - 1 >= 0) {
String arg = args[args.length - argCount - 1];
argCount++;
if (arg.startsWith("-printGroup=")) {
printGroup = Integer.parseInt(arg.substring("-printGroup=".length()));
}
}
StringBuilder sb = new StringBuilder();
try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
}
Matcher matcher = pattern.matcher(sb.toString());
int matchesCount = 0;
while (matcher.find()) {
if (printGroup > 0) {
System.out.println(matcher.group(printGroup));
} else {
System.out.println(matcher.group());
}
matchesCount++;
}
System.out.println("----------------------------------------");
System.out.println("File: " + filename);
System.out.println("Pattern: " + pattern.pattern());
System.out.println("PrintGroup: " + printGroup);
System.out.println("Matches: " + matchesCount);
}
}
c: \ jgrep \ jgrep.bat (разом з jgrep.jar):
@echo off
java -cp c:\jgrep\jgrep.jar com.jgrep.JGrep %*
і додайте c: \ jgrep в кінці змінної середовища PATH.
Тепер просто дзвоніть jgrep "expression" file.txt
з будь-якого місця.
Мені потрібно було надрукувати деякі конкретні групи з мого виразу, тому я додав модифікатор і називав це так jgrep -printGroup=1 "expression" file.txt
.
Я усвідомлюю його старе питання, але я наткнувся на цю посаду, шукаючи відповіді. І я знайшов такого, щоб додати його сюди для колективної інтернет-пам’яті
Powershell: Модуль вибору рядків: Microsoft.PowerShell.Utility
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-string
а також інформативна публікація в блозі з розширеними прикладами: "Як" помилитися "в PowerShell" https://antjanus.com/blog/web-development-tutorials/how-to-grep-in-powershell/
Простий приклад з цієї публікації в блозі: cat package.json | Select-String -Pattern webpack ls ./src/components/ | Вибрати-Рядок -Перегляд на потоці
C:> кішка post.md | Select-String -Pattern "^ \ w *:"
Використовувати Cygwin ...
він має 32 та 64 бітні версії,
і він прекрасно працює від Windows 2000 (*)
до Windows 10 або Server 2019
Я довго користуюся Cygwin ...
і нещодавно намагався замінити Windows-Linux-підсистемами ...
ненадовго ...
Я швидко знову повернувся до Цигвіна ...
набагато більш гнучким, контрольованим і багатим ...
також менш нав'язливим ...
просто додайте \ bin до шляху ...
і ви можете використовувати його будь-яке програмне забезпечення в Windows / Batch / Powershell ...
або в DOS-коробці ... або в Powershell-Box ...
Також ви можете встановити багато чудових пакетів,
які справді працюють ... як nginX або PHP ... Я навіть використовую пакет Cygwin PHP у своєму IIS ...
Як бонус ви можете також використовувати його з баш-шкаралупи ...
(Я думаю, це був початковий намір ;-))