metin dosyasının her satırında dizenin n. oluşumunu değiştir


15

Alanı ayrılmış dizeleri (2-5) ile büyük metin dosyaları var. Dizeler "" "veya" - "içerebilir. İkinci boşluğu bir boru ile değiştirmek istiyorum.

Gitmenin en iyi yolu nedir?

Sed kullanarak bunu düşünüyordum:

sed -r 's/(^[a-z'-]+ [a-z'-]+\b) /\1|/' filename.txt

Başka / daha iyi / daha basit fikirler var mı?

Yanıtlar:


22

Yedek komutun sonuna bir sayı ekleyebilirsiniz. Örneğin, aşağıdakilerin ikincisi , her satırındaki olddizeyle değiştirilir :newfile

sed 's/old/new/2' file

Dolayısıyla, önerilen çözümünüz yerine şunları kullanabilirsiniz:

sed 's/ /|/2'

Daha fazla bilgi için, örneğin bkz bu sed öğretici .


2
Gönderen sedbilgi dosyası: "Not: POSIX standardı karıştırıp ne yapılacağını belirtmez g' and NUMBER modifiers, and currently there is no widely agreed upon meaning across sed 'uygulamalarını İçin GNU` sed', etkileşim olarak tanımlanır: SAYI'ıncı önce eşleşmeleri görmezden ve ardından maç ve tamamının yerini NUMBER.
— sonraki duyuruya kadar duraklatıldı.

Bilgi dosyaları ... Onlardan nefret ediyorum. Her neyse, belirsiz kısmı kaldırdım. İyi yorum, +1.
— mrucci

1
Teşekkürler, mrucci ve Dennis. Orada basit bir şey olması gerektiğini düşündüm.
— dnkb

Metin manipülasyonu ile ilgili her sorunum var, çözmeyi başardım sed. Benim için seddaha da yararlı olduğu için sana teşekkür etmem gerektiğinden emin değilim , ama yine de yapacağım. ;)
— Jamie

1

Sürümünüzü denediniz mi? İşe yaradı mı? Çünkü bence bu iyi bir fikir. Yine de biraz farklı yaparım:

sed -re 's/^([^ ]+ +[^ ]+) /\1|/'

Bu, bir sözcükteki boşluk olmayan karakterleri kabul eder ve ilk iki sözcük arasında birden çok boşluk kabul eder.

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.