String'in bir parçasını bulun ve bir dosyadaki dizinin tamamını değiştirin


0

"Ticket_Release1" ve "Ticket_V2" gibi bir dize içeren A.xml adlı bir dosyam var.

Ticket_ ile başlayan dosyadaki tüm dizeleri bulmak ve yerine Ticket_Final adlı bir şey koymak istiyorum.

Örneğin, Ticket_ dizesini arayarak "Ticket_Release1" ve "Ticket_V2" yi "Ticket_Final" ile değiştirin

Lütfen bana yardım eder misin?


3
Lütfen örnek giriş ve çıkış verilerini eklemek için sorunuzu düzenleyin. Bu dizgiler yeni satırlarda mı oluşuyor, başka sınırlayıcılar var mı? etc ...
jasonwryan

1
Bir "string" i nasıl tanımlarsınız? "Bilet 1" bir dize mi, iki mi? Quotes ( ") bir dize parçası mı? Bir dizgenin bir Ticket_sonraki boşluk karakterine kadar başlayan bir şey olduğunu varsaymalı mıyız ? Nasıl hakkında fooTicket_1? Bu sayılmalı mı? Lütfen sorunuzu düzenleyin ve netleştirin.
terdon

Yanıtlar:


0

Kullanabilirsiniz sed:

sed -i.BACKUP 's/\"Ticket_.*\"/\"Ticket_Final\"/g' <xml_file>

Açıklama:

-i.BACKUP : Aynı dosyanın yerine geçecek, ancak istendiği gibi çalışmadığı takdirde, xml_file.BACKUP adlı bir yedek tutacaktır.

s/ORIGINAL_REGEXP/SUBSTITUTION/g: sHer durum için ( ), SUBSTITUTION için ORIGINAL_REGEXP yerine ( g) kullanın.

\"Ticket_.*\" : Tırnak işaretleri arasında Bilet gibisi olan herhangi bir şey.


2
\"Ticket_.*\"Tso tırnak arasında mümkün olan en uzun dize eşleşecek, kullanmak daha iyi \"Ticket_[^"]*.
123

Kesinlikle haklısın, sonunu buluncaya kadar her ipi alacak ". Ama sanırım "karşılaştığı ilkini hala kontrol etmenin bir zorunluluk olduğunu düşünüyorum \"Ticket_[^"]*\". Fakat yine de "Ticket_"bir gereklilik olup olmadığını bilmediğim bir şeyi kabul edecek .
Isaac,

Sizin global bayrağı burada kullanışlı değildir.
mikeserv

Nedenini açıklar mısın? Çok basit olan sed'i kullandığım kadarıyla g, aynı satırda birkaç "Bilet _..." olması durumunda, sadece ilk oluşum ikame edilecek.
Isaac,

peki, "Ticket_.*"aynı çizgide birkaç maç varsa , en azından.* ilkinden sona kadar (en azından) yer , ve yine de ondan en fazla alabileceğiniz 1'dir.
mikeserv
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.