Regex Zamień z wiersza poleceń

21

Czy można regex zastąpić z wiersza poleceń? Teraz używam do tego notatnika ++. W wierszu poleceń mogę używać tylko FINDSTR, który może tylko zlokalizować mached pliki / linie

EDYCJA:
Może uda się stworzyć skrypt VB i uruchomić go z cmd? Właśnie utworzyłem plik „hi.vbs” z zawartością

Msgbox "Hi Buddy"

Następnie cmd pozwala mi uruchomić go bezpośrednio, wpisując „hi” z wiersza poleceń.
Więc jeśli nie jest to możliwe ze skryptem wsadowym, mogę użyć skryptu wsadowego. Lub..?

Aziz
źródło
Na koniec umieścisz niejednoznaczne zdanie, a cała część EDYCJI nie wskazuje na problem, jest bardziej jak: „Tworzę świat cześć w vb, czy mogę stworzyć coś takiego w partii? Sprawdź odpowiedź wysłana przez @IanPugsley to: prosty sposób na wykonanie wyrażenia regularnego
mjsr
@Aziz: czy którakolwiek z tych odpowiedzi działała dla Ciebie? Jeśli tak, czy zaakceptowałbyś to? To część uczestnictwa w tej społeczności; sposób, w jaki dziękujemy sobie nawzajem za pomoc. Punkty reputacji przyznane za zaakceptowaną odpowiedź pomagają innym użytkownikom oceniać nawzajem swoje doświadczenia. Dzięki.
JRobert
Myślałem o wywołaniu czegoś takiego jak MYVBREPLACE (.vbs) FILENAME REGEXPATTERN REPLACEMENT z wiersza poleceń.
Aziz

Odpowiedzi:

11

przejdź tutaj
http://gnuwin32.sourceforge.net/packages.html
przewiń w dół do SED. Pobierz także coreutils, gdy jesteś przy tym.

to polecenie zastąpi globalnie literę b, aw każdej linii. więc nie tylko pierwsze wystąpienie na linii.

np. używając sed "s / a / b / g" a.txt

C:\>type a.txt
aaaa
aaa

C:\>sed "s/a/b/" a.txt
baaa
baa

C:\>sed "s/a/b/g" a.txt
bbbb
bbb

C:\>

VBScript obsługuje wyrażenia regularne, możesz je znaleźć i zastąpić nim.

dim re, s
set re = new RegExp

re.Pattern="in"
re.Global=True 'false is default
s="bin din in"
MsgBox re.Replace(s,"xxx")

Wyświetla bxxx dxxx xxx

barlop
źródło
Niesamowite szalone narzędzie !!! To narzędzie było zbyt zaawansowane. Nie mogłem jeszcze z niego korzystać, ale kiedy czytam gnu.org/software/sed/manual/sed.html#The-_0022s_0022-Command , widzę, że może to zrobić znacznie więcej, niż mogłem się spodziewać. Wielkie dzięki
Aziz,
Nowe wersje bash mogą również obsługiwać wyrażenia regularne, czasem wystarczy to do prostych zadań i nie trzeba używać nawet sed.
vtest
i ponownie, co powiedział vtest, na wypadek, gdyby nikt nie wiedział. cygwin ma bash.
barlop
sed jest do bani z wieloliniowymi zamiennikami
kofifus
1
@KennyEvitt powłoka cmd wymaga poprawki, aby wyświetlić i używać chcp dla Unicode utf8 chcp 65001 (jak mówisz, kodowanie utf16.chcp 1200 i chcp 12001 nie jest obsługiwane) stackoverflow.com/questions/9321419/... Not sure re miętowy. Nie jestem pewien, czy program PowerShell Ale utf-8 jest obsługiwany ok w cmd lub PowerShell. Tak długo, jak używana jest czcionka pomocnicza, jak nowa kurier, i tak długo, jak jest to strona kodowa 65001. Istnieje kod cmd / u dla kodowania utf16.
barlop
26

W tym celu napisałem bezpłatne narzędzie wiersza poleceń dla systemu Windows. Nazywa się rxrepl , obsługuje Unicode i wyszukiwanie plików. Niektórzy mogą uznać to za przydatne narzędzie.

rxrepl to narzędzie wiersza polecenia systemu Microsoft Windows do wyszukiwania i zastępowania tekstu w plikach tekstowych przy użyciu wyrażeń regularnych zgodnych z Perl (PCRE).

Ma następujące funkcje:

  • Wyszukaj za pomocą wyrażeń regularnych zgodnych z Perl
  • Użyj dopasowania grupy w tekście zastępczym
  • Obsługuje zakończenia linii Windows i Unix
  • Obsługa Unicode
  • Akceptuje wiele argumentów wyszukiwania / zamiany
  • Opcje mogą znajdować się w pliku opcji
  • Wyszukaj pliki
  • Tryb podglądu
  • Tryby dopasowania do linii i pełnego pliku

wprowadź opis zdjęcia tutaj

użytkownik2005187
źródło
4
To jest niesamowite! Jeśli jesteś podobny do mnie i potrzebujesz przykładów, to zamienia „foobar” na „foofighters” w pliku: rxrepl.exe -f file.txt -a -s "(foo) bar" -r "\ 1fighters"
Dunc
1
Ponadto, czy zdarzyło Ci się mieć źródło czegoś takiego jak github? Całkowicie zrozumiałe, jeśli nie ma być open source, ale jestem bardzo ciekawy.
kayleeFrye_onDeck
1
@Steztric Naprawdę? Mam 64-bitowe okna i wydaje się, że nie mam problemów z uruchomieniem tegoC:\WINDOWS\System32\cmd.exe
kayleeFrye_onDeck Stycznia
1
Niesamowite narzędzie! Działa bez problemów w systemie Windows Server Std 2012 R2 x64. Dzięki!
kwrl
2
Świetne narzędzie, mam nadzieję, że nadal je utrzymujesz
wodnisty
12

Skrypciarz opisuje, jak to zrobić w programie PowerShell (bez dodatkowych pobrań w najnowszych systemach operacyjnych Windows, prawdopodobnie już go masz).

Uruchom go, uruchom następujące polecenie (aby zamienić na *a @):

(Get-Content C:\Scripts\Test.txt) | 
Foreach-Object {$_ -replace "\*", "@"} | 
Set-Content C:\Scripts\Test.txt

Obsługuje wyrażenia regularne .NET , w tym pozytywne i negatywne spojrzenie w przyszłość, i wszystkie rzeczy, które notepad ++ nie obsługiwały wyrażenia regularnego przed wersją 6.x (o ile uwielbiam notepad ++).

Ian Pugsley
źródło
1
Notepad ++ obsługuje pełną wersję PCRE od wersji 6.
Bob
5

Znalazłem do tego fnr.exe . Ma GUI i wiersz poleceń.

Narzędzie typu open source do wyszukiwania i zastępowania tekstu w wielu plikach.

cechy

  • Pobieranie pojedynczego pliku - fnr.exe (127kb)
  • Zamień tekst w wielu plikach za pomocą aplikacji systemu Windows lub wiersza polecenia
  • Znajdź tylko, aby zobaczyć, gdzie znaleziono dopasowania
  • Wyszukiwanie z rozróżnianiem wielkości liter
  • Wyszukiwanie plików w jednym katalogu lub rekurencyjne podkatalogi
  • Wyrażenia regularne
  • Znajdź i zamień tekst wielowierszowy
  • Wygeneruj przycisk wiersza polecenia, aby utworzyć tekst wiersza polecenia, aby umieścić go w pliku wsadowym
  • Pomoc z linii poleceń
  • Testy jednostkowe silnika Znajdź / Zamień

Wyświetlanie opcji wiersza poleceń

wprowadź opis zdjęcia tutaj

Sergiusz
źródło
1
Całkiem nieźle - możesz sprawdzić instrukcję „find” w GUI, kliknąć „Gen Replace Command Line” i przygotować się do użycia wywołania z linii poleceń. Nie musisz tracić czasu na zapoznanie się ze składnią wiersza poleceń.
sarh
Po wprowadzeniu zmian nie udało mi się tego zrobić. Muszę nacisnąć Enter, aby zamknąć, co nie jest szczególnie przydatne w skryptach
G-.
@SOL-. Nie trzeba czekać na <enter>, jeśli jest uruchamiany z pliku wsadowego.
Sergius
Nie mogłem znaleźć sposobu na wyjście do innej nazwy pliku / rozszerzenia
Rick
4

Wygląda na to, że możesz użyć wyrażenia regularnego z FINDSTR

findstr [Windows CMD] :

findstr pozwala na wyszukiwanie tekstu (zgodnie ze wzorcem w pliku nazwa-pliku. Jeśli nazwa-pliku zawiera symbole wieloznaczne (* lub?), wyszukuje wszystkie pasujące pliki. Opcja / S wyszukuje w bieżącym katalogu, a także w podkatalogach. Jeśli wzorzec zawiera spacje, należy go określić tak jak / C: „tekst do przeszukania”. Aby przekształcić wzorzec w wyrażenia regularne, należy użyć opcji / R. Opcja / I przeszukuje wielkość liter niewrażliwy.

Z pomocy FindStr ( Findstr /?):

/ R - używa ciągów wyszukiwania jako wyrażeń regularnych.

Regular expression quick reference:
  .        Wildcard: any character
  *        Repeat: zero or more occurrences of previous character or class
  ^        Line position: beginning of line
  $        Line position: end of line
  [class]  Character class: any one character in set
  [^class] Inverse class: any one character not in set
  [x-y]    Range: any characters within the specified range
  \x       Escape: literal use of metacharacter x
  \<xyz    Word position: beginning of word
  xyz\>    Word position: end of word
p0rkjello
źródło
Dziękuję za odpowiedź, ale to nie było moje pytanie.
Aziz
2
findstrnie można zamienić tekstu w plikach!
Kenny Evitt,
4

Jestem trochę spóźniony na imprezę, ale JREPL.BAT to hybrydowe narzędzie regex oparte na JScript / batch, które działa natywnie na dowolnym komputerze z systemem Windows od XP.

Pełna dokumentacja jest wbudowana w skrypt, do którego można uzyskać dostęp za pośrednictwem stronicowanych danych wyjściowych JREPL /?lub użyć ich JREPL /??.

JREPL używa standardowego wyrażenia regularnego ECMA dostarczanego z JScript. Wyrażenie regularne ECMA nie jest tak potężne, jak wyrażenie regularne .NET dostępne dla PowerShell, ale nadal jest całkiem dobre. I myślę, że przeciętny użytkownik uzna to narzędzie za łatwiejsze w użyciu niż PowerShell.

Wbudowane opcje JREPL zapewniają już wiele wbudowanej mocy, ale możliwość wstrzyknięcia dostarczonego przez użytkownika języka JScript naprawdę otwiera niesamowite możliwości.

Opracowałem skrypt, ponieważ moje miejsce pracy nie pozwala na pobieranie niestandardowych plików exe, ale nie ma ograniczeń w pisaniu skryptów wsadowych lub JScript :-)

Po prostu skorzystaj z linku i skopiuj kod skryptu do pliku o nazwie JREPL.BAT. Przeczytaj kolejne posty z tego wątku, aby zapoznać się z przykładami historii użytkowania i programowania. Istnieje również wiele odpowiedzi StackOverflow, które używają JREPL.BAT.

dbenham
źródło
3

Dwie dobre opcje to Cygwin, który da ci uniksowe, podobne do bash środowisko (alternatywa dla cmd.exe); oraz Unxutils , porty Win32 kolekcji indywidualnych narzędzi Uniksa. W obu pakietach zobacz „sed”, „awk” i „grep”.

JRobert
źródło
2
unxutils jest stary. teraz chodzi o gnuwin32
barlop
Dziękuję JRobert za sugestię. Przepraszam, że tego nie zrozumiałem, ale teraz widzę, że to właśnie SED.
Aziz
@barlop od 2018 r. gnuwin32 jest teraz również stary .. cygwin jest bardziej aktualny!
barlop
0

Możesz także użyć GSAR do wyszukiwania i zamiany wiersza poleceń. Działa również z szesnastkowym i binarnym. Nie wykona złożonego ciężkiego podnoszenia, który może wykonać wyrażenie regularne, ale w przypadku podstawowego wyszukiwania i wymiany wykonuje zadanie szybko i łatwo.

Słońce
źródło