Sed yerine birden çok satırda bir cümle


11

Sed kullanmak için yeniyim ama sed'in s/..../..../(yedek) bir satırda tam bir cümleyi değiştirmek için deniyorum ama nasıl iki satırda ayrılmış bir cümle nasıl değiştirileceği konusunda alternatif bir çözümden habersizim:

Bu:

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

aslında şu şekilde yazılmıştır:

Lorem Ipsum is simply dummy text of the 
printing and typesetting industry.

Bunu nasıl algılayabilir veya bir yerine iki satırda bile olsa tüm cümleyi değiştirmek için nasıl kodlayabilirsiniz?


Büyük sed referans kitabı: sed için kesin rehber Eğitim ve Referans Daniel A. Goldman tarafından ISBN: 978-1-939824-01-1 (EPUB sürümü) 08148804441822
Joe

Yanıtlar:


16

Aşağıdaki komut her iki durumda da çalışır:

sed '/Lorem.*/ {N; s/Lorem.*industry\./string to replace/g}' filename

Daha fazla açıklama: Çok satırlı bir dizeyi değiştirmek için sed'i nasıl kullanabilirim?


3
@Gilles İyi niyetlerinizi anlıyorum, ancak cevabımı bozmak için lütfen daha önce test etmeye çalışın. Daha iyi, başka bir fikriniz varsa, başka bir cevap eklemek veya yorum bırakmaktır.
Radu Rădeanu

Stack Exchange'e hoş geldiniz. Bu site birlikte düzenlenmiştir. Katkılarınızın diğer güvenilir kullanıcılar tarafından ortaklaşa düzenlenmesi fikrinden memnun değilseniz, bu site sizin için olmayabilir. Kodunuzun amaçlanan belirli bir ifadeden daha fazla yer değiştirdiğini fark ettim, bu yüzden bu ifadeyi düzenledim.
Gilles 'SO- kötü olmayı bırak'

@Gilles Lütfen, yaramaz olmanıza gerek yok. Ayrıca, "kod" unuz kesinlikle hiçbir şeyin yerine dikkat etmelisiniz . Dediğim gibi, iyi niyetlerinizi anlıyorum. Örneğimden, OP'nin birden fazla satırdaki bir cümle ile nasıl değiştirileceğini anlayacağını varsayalım sed, başka bir şey değil. Ve bu başlık sorusu. Başlık ilgili değil perl.
Radu Rădeanu

Hayır, gönderdiğim kod işe yarıyor. ( LoremSon satırda olması dışında , sürümünüzle paylaştığı bir kusur.)
Gilles 'SO- kötü olmayı durdurun'

3 veya daha fazla metin satırı olduğunda bu örnek çalışmaz :(
artnikpro

12

Sed, birden çok satırdaki desenlerle eşleşebilir (komutları kullanarak Nveya Heşleştirmeden önce ardışık satırlar eklemek için), bu rahatlık alanının dışındadır. Sadece acıyı seviyorsanız deneyin.

Perl bu tür şeyleri güzelce yapabilir. Bu -panahtarı , standart girişi her seferinde bir kayıt işlemesi ve değiştirilmiş kaydı (à la sed) yazdırması ve -000paragraf modunu (kayıtların boş satırlarla ayrıldığı) açmak için kullanın. Normal bir ifadede, \syeni satır dahil herhangi bir boşluk karakteriyle eşleşir.

perl -p -000 -e 's/Lorem\s+Ipsum\s+is\s+simply\s+dummy\s+text\s+of\s+the\s+printing\s+and\s+typesetting\s+industry\./Replacement text/g'

Orijinal metin içerdiğinde, değiştirilecek metne yeni satır eklemek istiyorsanız, bu daha karmaşıktır. Nasıl yapılacağı, yeni satırı nereye koyacağınıza dair gereksinimlerinize bağlıdır.


@terdon Ah, birden çok boşluğa izin vermek istedim ama unuttum. Teşekkürler, düzeltildi.
Gilles 'SO- kötü olmayı kes'

Soru şu sed. Ayrıca ile etiketlenir sed, ile değil perl.
Radu Rădeanu

0

sed, birden fazla satırda kolayca okunamaz. perl -i -0pe 's/.../.../...'Bunun yerine kullanın .


7
sed olabilir birden fazla satır okurlar!
Radu Rădeanu

3
@ RaduRădeanu Teknik olarak, evet. Ama nadiren zahmete değer.
Gilles 'SO- kötü olmayı kes'

3
@Gilles Kullanımı perlsizin için daha basitse, bu sednadiren zahmete değmez anlamına gelmez .
Radu Rădeanu
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.