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.