Regex Komut satırından değiştir


21

Komut satırından normal ifadeyi değiştirmek mümkün mü? Şu anda bunu yapmak için notepad ++ kullanıyorum. Komut satırında sadece işlenmiş dosyaları / satırları bulabilen FINDSTR'u kullanabilirim

EDIT:
Belki bir VB komut dosyası yapmak ve cmd'den çalıştırmak mümkün olacak? İçeriğe sahip bir "hi.vbs" dosyası oluşturdum

Msgbox "Hi Buddy"

Sonra cmd komut satırından "hi" yazarak doğrudan çalıştırmamı sağlıyor.
Toplu komut dosyası ile mümkün değilse, o zaman ben bir VB komut dosyası yalak toplu kullanabilirsiniz. Veya..?


Sonunda sonuçsuz bir cümle koydunuz ve tüm EDIT kısmı soruna işaret etmiyor "Vb'de merhaba bir dünya yaratıyorum, toplu işte böyle bir şey yaratabilir miyim? @IanPugsley tarafından gönderilen cevabı kontrol edin regex-replace yapmanın kolay yolu
mjsr

@Aziz: Bu cevaplardan herhangi biri sizin için çalıştı mı? Eğer öyleyse, bunu kabul eder misiniz? Bu, bu topluluğa katılmanın bir parçası; yardım için birbirimize teşekkür etme şeklimiz. Kabul edilen bir cevap için verilen itibar puanları, diğer kullanıcıların birbirlerinin deneyimlerini değerlendirmelerine yardımcı olur. Teşekkürler.
JRobert

Komut satırından MYVBREPLACE (.vbs) FILENAME REGEXPATTERN REPLACEMENT gibi bir şeyi çağırmayı düşünüyordum.
Aziz

Yanıtlar:


11

buraya gidin
http://gnuwin32.sourceforge.net/packages.html
aşağı kaydırarak SED'e gidin. Siz hazır olduğunuzda coreutils'i indirin.

bu komut genel olarak ve her satırda a yerine b değerini koyar. yani sadece satırdaki ilk olay değil.

örneğin sed "s / a / b / g" a.txt kullanmak

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 düzenli ifadeleri destekliyor, bulup değiştirebilirsin.

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")

Görüntüler bxxx dxxx xxx


İnanılmaz çılgın aracı !!! Bu araç çok uyuşmuştu. Henüz kullanmayı başaramadım, ancak gnu.org/software/sed/manual/sed.html#The-_0022s_0022-Command okuduğumda , bunun beklediğimden çok daha fazlasını yapabileceğini görebiliyorum. Çok teşekkürler
Aziz

Bash'in yeni sürümleri de düzenli ifadeler yapabilir, bazen basit görevler için yeterlidir ve sed bile kullanmaya gerek yoktur.
vtest

ve kimsenin bilmemesi durumunda, seçmenin söylediklerini tekrarlayın. cygwin'in bash'ı var.
barlop

sed olsa çok satır yerine berbat
kofifus

1
@KennyEvitt cmd kabuğu, unicode utf8 chcp 65001 için chcp'nin görüntülenmesini ve kullanılmasını sağlamak için bir tweak gerektirir (dediğin gibi, utf16 encoding.chcp 1200 ve chcp 12001 desteklenmez) stackoverflow.com/questions/9321419/… Emin değilim mintty. Powershell yeniden emin değilim. Ancak utf-8, cmd veya powershell olarak desteklenir. Destekleyici yazı tipi kurye yeni gibi kullanıldığı sürece ve kod sayfası 65001 olduğu sürece. Bir utf16 kodlaması için bir cmd / u vardır.
barlop

26

Windows'un bunu yapması için ücretsiz bir komut satırı aracı yazdım. Buna rxrepl denir , Unicode ve dosya aramayı destekler. Bazıları yararlı bir araç bulabilir.

rxrepl, Perl uyumlu düzenli ifadeler (PCRE) kullanarak metin dosyalarındaki metni aramak ve değiştirmek için kullanılan bir Microsoft Windows komut satırı aracıdır.

Aşağıdaki özelliklere sahiptir:

  • Perl Uyumlu Düzenli İfadeler kullanarak arama yapın
  • Yedek metinde grup eşleşmesini kullan
  • Windows ve Unix satır sonlarını destekler
  • Unicode desteği
  • Birden çok arama / değiştirme bağımsız değişkenini kabul eder
  • Seçenekler bir seçenekler dosyasında sağlanabilir
  • Dosyaları tara
  • Önizleme modu
  • Çizgi ve tam dosya eşleme modları

resim açıklamasını buraya girin


4
Bu harika! Eğer benim gibi ve örneklere ihtiyacınız varsa, bu "foobar" yerine bir dosyadaki "foofighters" yerine geçer: rxrepl.exe -f file.txt -a -s "(foo) bar" -r "\ 1fighters"
Dunc

1
Ayrıca, github gibi bir şeyin kaynağına sahip olur musunuz? Açık kaynak olması amaçlanmıyorsa tamamen anlaşılabilir, ama çok merak ediyorum.
kayleeFrye_onDeck

1
@Steztric Gerçekten mi? 64-bit windows çalıştırıyorum ve bu çalışan herhangi bir sorun var gibi görünüyorC:\WINDOWS\System32\cmd.exe
kayleeFrye_onDeck

1
Harika bir araç! Windows Server Std 2012 R2 x64 altında sorunsuz çalışıyor. Teşekkür!
kwrl

2
Harika bir araç, umarım hala bakımını yaparsınız
sulu

12

Scripting Guy , PowerShell'de bunun nasıl yapılacağını kapsar (en son Windows işletim sistemlerinde ek indirme yoktur, muhtemelen zaten yüklemişsinizdir).

Başlatın, aşağıdakileri çalıştırın (a'yı a *ile değiştirmek için @):

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

Bu , olumlu ve olumsuz ileriye bakma dahil olmak üzere .NET düzenli ifadelerini destekler ve notepad ++ 'ın sürüm 6.x'ten önce (notepad ++' ı sevdiğim kadar) regex ile desteklemedi.


1
Notepad ++ sürüm 6'dan itibaren tam PCRE'yi destekler
Bob

5

Bunun için fnr.exe buldum . GUI ve komut satırı vardır.

Birden çok dosyadaki metni bulmak ve değiştirmek için açık kaynaklı bir araçtır.

Özellikleri

  • Tek dosya indirme - fnr.exe (127kb)
  • Windows uygulamasını kullanarak veya komut satırını kullanarak birden çok dosyadaki metni değiştirme
  • Eşleşmelerin nerede bulunduğunu görmek için Yalnızca Bul
  • Büyük / küçük harfe duyarlı arama
  • Bir dizindeki dosyaları arama veya alt dizinleri yineleme
  • Düzenli ifadeler
  • Çok satırlı metin bulma ve değiştirme
  • Toplu iş dosyasına koymak üzere komut satırı metni oluşturmak için komut satırı düğmesi oluştur
  • Komut satırı yardımı
  • Motoru Bul / Değiştir birim testleri

Komut satırı seçeneklerini görüntüleme

resim açıklamasını buraya girin


1
Oldukça hoş - GUI'de "find" ifadenizi kontrol edebilir, "Gen Komut Satırını Değiştir" i tıklayabilir ve komut satırı çağrısını kullanmaya hazır olabilirsiniz. Komut satırı sözdizimini tanımak için zaman harcamanıza gerek yok.
sarh

Değişiklikleri yaptıktan sonra çıkmasını sağlayamadım. Ben basına komut dosyası için bu özellikle yararlıdır değil yapım kapatmak için girmek zorunda
G-.

@ G. Bir toplu iş dosyasından çalıştırılırsa <enter> beklenir.
Sergius

Farklı bir dosya adına / uzantısına çıkış yapmanın bir yolunu bulamadım
Rick

4

FINDSTR ile normal ifadeyi kullanabileceğiniz anlaşılıyor

findstr [Windows CMD] :

findstr metin aramasına izin verir (dosya dosya adında desenle belirtildiği gibi. Dosya adı joker karakterler (* veya?) içeriyorsa, eşleşen tüm dosyalarda arama yapar. / S seçeneği geçerli dizinde olduğu gibi geçerli dizinde de arama yapar Kalıp boşluk içeriyorsa, so / C: "aranacak metin" gibi belirtilmelidir. Kalıbı normal ifadelere dönüştürmek için / R seçeneği kullanılmalıdır. duyarsız.

FindStr Yardımı'ndan ( Findstr /?):

/ R - Arama dizelerini normal ifadeler olarak kullanır.

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

Cevabınız için teşekkür ederim, ama bu benim sorum değildi.
Aziz

2
findstrdosyalardaki metinlerin yerini alamaz!
Kenny Evitt

4

Partiye biraz geç kaldım, ancak JREPL.BAT, XP'den itibaren herhangi bir Windows makinesinde yerel olarak çalışan karma JScript / toplu komut tabanlı regex yardımcı programıdır .

Komut dosyasına, belgelenmiş çıktı için erişilebilen JREPL /?veya kullanılabilen tam belgeler dahildir JREPL /??.

JREPL, JScript ile birlikte gelen standart ECMA normal ifadesini kullanır. ECMA regex, powershell için kullanılabilen .NET regex kadar güçlü değildir, ancak yine de oldukça iyidir. Ve ortalama bir kullanıcı bu yardımcı programı kullanmak powershell daha kolay bulacaksınız düşünüyorum.

Yerleşik JREPL seçenekleri zaten çok fazla doğal güç sağlar, ancak kullanıcı tarafından sağlanan JScript'i enjekte etme yeteneği gerçekten şaşırtıcı olasılıklar açar.

Çalışma ortamım standart olmayan exe dosyalarının indirilmesine izin vermediğinden, ancak toplu iş veya JScript komut dosyaları yazma konusunda herhangi bir kısıtlamaya sahip olmadığı için komut dosyasını geliştirdim :-)

Sadece bağlantıyı izleyin ve komut dosyası kodunu JREPL.BAT adlı bir dosyaya kopyalayın. Kullanım ve geliştirme geçmişi örnekleri için bu konu başlığından sonraki yazıları okuyun. Ayrıca JREPL.BAT kullanan birçok StackOverflow yanıtı vardır.


3

İki iyi seçeneklerdir ya Cygwin size Unix benzeri, bash benzeri ortamda (cmd.exeye alternatif) verecek olan; ve Unxutils , bireysel Unix yardımcı programlarının koleksiyonunun Win32 bağlantı noktaları. Her iki pakette de bkz. 'Sed', 'awk' ve 'grep'.


2
unxutils eskidir. şimdi şey gnuwin32
barlop

Öneriniz için teşekkür ederim JRobert. Üzgünüm, bunu anlamadım, ama şimdi SED'in bir şey olduğunu görebiliyorum.
Aziz

@barlop 2018 itibariyle, gnuwin32 şimdi de eski .. cygwin daha güncel!
barlop

0

GSAR'ı komut satırı araması yapmak ve değiştirmek için de kullanabilirsiniz . Hex ve binary ile de çalışır. Normal regex'in yapabileceği karmaşık ağır kaldırmayı yapmaz, ancak temel arama ve değiştirme için işi hızlı ve kolay bir şekilde yapar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.