Metin dosyasındaki tüm beyaz boşlukları virgülle değiştirin


10

Metnimin içindeki tüm beyaz boşlukları virgülle değiştirmem gerekiyor. Şu anda bu satırı kullanıyorum ama işe yaramıyor: Çıktı olarak orijinaliyle tam olarak aynı olan bir metin dosyası alıyorum:

sed 's/[:blank:]+/,/g' orig.txt > modified.txt

Teşekkürler


sed 's / [[: blank:]] \ + /, / g'
mug896

@ mug896 Ubuntu benim için çalıştı 18.04 Ben çift köşeli parantez ve \ önce +
dmontaner

Yanıtlar:


15

İle sed:

sed -e 's/\s\+/,/g' orig.txt > modified.txt

Veya perl:

perl -pne 's/\s+/,/g' < orig.txt > modified.txt

Düzenleme: Perl'de yeni satırları hariç tutmak için, bir çift negatif kullanabilir 's/[^\S\n]+/,/g'veya yalnızca seçtiğiniz beyaz karakterlerle eşleşebilirsiniz 's/[ \t\r\f]+/,/g'.


Teşekkürler, ancak yine de bir sorun var: "Sonraki satırları \ n" virgül ile değiştirmek istemiyorum ve perl ile komut şu anda yapıyor. O yazdı komuta, hala çalışmıyor.
aneuryzm

Üzgünüm +sed içinde operatörden kaçman gerekiyor, ben sadece cevabımı güncelledim. Yeni satırlar perl'deki beyaz adımdır, bu nedenle eklemek için istemiyorsanız beyaz adım sınıfınızı manuel olarak yapmanız gerekir. Bunun için wel olarak iki çözüm ekledim.
Caleb

13

Kullanma tr:

tr -s '[:blank:]' ',' <file

Bu, yatay boşlukları virgülle değiştirir. Tekrarlanan boşluklar yalnızca tek bir virgülle değiştirilecektir.


-1
awk '{print $1","}' Servers | tr -d '[\n]' | xargs echo 

İşte dosya adı Sunucular .. Aşağıdaki içeriği içerir ..

Server1
Server2
Server3

Yukarıdaki komutu kullanırsak aşağıdaki çıktıyı alabiliriz.

Server1,Server2,Server3,


[mohramak@oc3246038448 Desktop]$ cat Servers
Server1
Server2
Server3
[mohramak@oc3246038448 Desktop]$ awk '{print $1","}' Servers | tr -d '[\n]' | xargs echo 
Server1,Server2,Server3,
[mohramak@oc3246038448 Desktop]$ 
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.