Bir metin dosyasından yeni satırları nasıl kaldırırım?


116

Aşağıdaki verilere sahibim ve hepsini tek bir satıra koymam gerekiyor.

Bu bende var:

22791

;

14336

;

22821

;

34653

;

21491

;

25522

;

33238

;

Buna ihtiyacım var:

22791;14336;22821;34653;21491;25522;33238;

DÜZENLE

Bu komutların hiçbiri mükemmel çalışmıyor.

Çoğu, verilerin şöyle görünmesine izin verir:

22791

;14336

;22821

;34653

;21491

;25522

15
Tarayıcının adres çubuğuna veya başka bir metin alanına kopyalayıp yapıştırın. Quick'n'dirty ancak küçük miktarlarda veri için çalışır.
ignis

Yanıtlar:


245
tr -d '\n' < yourfile.txt

Düzenle:

Burada yayınlanan komutlardan hiçbiri çalışmıyorsa, alanlarınızı ayıran satırsonu dışında bir şeyiniz vardır. Muhtemelen dosyada DOS / Windows satır sonları var mı (Perl çözümlerinin bu durumda bile çalışmasını beklerdim)?

Deneyin:

tr -d "\n\r" < yourfile.txt

Eğer bu işe yaramazsa, o zaman dosyanızı daha yakından incelemek (örneğin, bir onaltılık düzenleyicide) orada gerçekten hangi karakterlerin olduğunu ve kaldırmak istediğinizi bulmak zorunda kalacaksınız.


7
Bu çıktıyı aynı veya başka bir dosyaya nasıl yazarsınız?
StackOverflowOfficial

3
trBoş hatlar için uygun olmadığını düşünüyorum . Ne düşünüyorsun? - - Bence sedburada açıklanan en iyi seçenek stackoverflow.com/q/16414410/54964
Léo Léopold Hertz 준영

Çıktıyı başka bir dosyaya yönlendirmek için yalnızca çıktı yeniden yönlendirmesini kullanın. Aynı dosyaya yönlendirmek için onu "sünger" e yönlendirin (Debian temel sistemlerinde "moreutils" paketinde mevcuttur).
plugwash

Çıktıyı aynı dosyaya yazmak için bir alt kabuk kullanınecho -n $(tr -d "\n" < yourfile.txt) > yourfile.txt
andpei

11
perl -p -i -e 's/\R//g;' filename

İşi yapmalı.


Golfs toperl -pie 's/\R//g' filename
Trenton

9
paste -sd "" file.txt

1
Solaris'te (10) paste -sd ""varsayılan olarak STDIN üzerinde çalışmaz, bu yüzden ona (some command) | paste -sd "" -
bağlıysanız şunu

Son satır satırını da kaldırmak istiyorsanız bu işe yaramaz . Yalnızca ara satır satırlarını kaldırır.
josch

Bu, Mac OS'de çalışmadı, Sundeep'in sürümü işe yaradı. paste -sd'\0' -
Trenton

7
tr -d '\n' < file.txt

Veya

awk '{ printf "%s", $0 }' file.txt

Veya

sed ':a;N;$!ba;s/\n//g' file.txt

Bu sayfa burada kaldır satırsonlarına diğer yöntemlerle bir grup vardır.

kedi suistimalini kaldırmak için düzenlendi :)


4

kullanım

head -n 1 filename | od -c 

soruna neden olan karakterin NE olduğunu anlamak için. sonra kullan

tr -d '\n' <filename

LF için

tr -d '\r\n' <filename

CRLF için



2

Man 1 ed kullanımı:

# cf. http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed 
ed -s file <<< $'1,$j\n,p'  # print to stdout 
ed -s file <<< $'1,$j\nwq'  # in-place edit

2

İnek gerçeği: Bunun yerine ASCII kullanın.

tr -d '\012' < filename.extension   

(Düzenlendi çünkü aynı çözüme sahip olan lanet olası cevabı görmedim, tek fark benimkinin ASCII'ye sahip olmasıydı)


2

Sed'i POSIX sınıflarıyla kullanın

Bu, yalnızca boşluk içeren tüm satırları kaldırır (boşluklar ve sekmeler)

sed '/^[[:space:]]*$/d'

Sadece çalıştığınız şeyi alın ve ona aktarın

Misal

cat filename | sed '/^[[:space:]]*$/d'


sed -i '/ ^ [[: boşluk:]] * $ / d' dosya adı ... yerinde düzenleme için; yukarıdaki gibi cevap ekrana
çıkacak

1
$ perl -0777 -pe 's / \ n + // g' input> çıktı
$ perl -0777 -pe 'tr / \ n // d' input> çıktı

1

Veriler file.txt dosyasındaysa, o zaman:

echo $(<file.txt) | tr -d ' '

' $(<file.txt)', Dosyayı okur ve içeriği, 'yankı' olan ve ardından aralarında bir boşluk bırakarak yankılanan bir dizi kelime olarak verir. 'Tr' komutu daha sonra tüm boşlukları siler:

22791;14336;22821;34653;21491;25522;33238;

Bu, girdi çok büyük olmadığı ve Bash'i kullandığınız sürece çalışır (Bash için etiketlenmiştir, bu yüzden sorun değil). Cevabı şimdi yazsaydım, öyle olurdu tr -d '\n' < file.txt, kabul edilen cevabın yaptığı şey budur (ve o sırada yazmadığıma şaşırdım). Bu muhtemelen 'bunu yapmanın başka bir yolunu' göstermek için yazılmıştır.
Jonathan Leffler

1

xargs yeni satırları da kullanır (ancak son bir satırsonu ekler):

xargs < file.txt | tr -d ' '

1

Yalnızca rakamları ve noktalı virgülleri tutmak istediğinizi varsayarsak, en son "satırsonu" nu da kaldıracak olsa da, büyük kodlama sorunları olmadığını varsayarak aşağıdakiler hile yapmalıdır:

$ tr -cd ";0-9"

Yukarıdakileri diğer karakterleri içerecek şekilde kolayca değiştirebilirsiniz, örneğin ondalık noktaları, virgülleri vb. Tutmak istiyorsanız.


1

Gedit metin düzenleyicisini kullanma (3.18.3)

  1. Ara'yı tıklayın
  2. Bul ve Değiştir ... 'i tıklayın .
  3. Enter \n\siçine Bul alanına
  4. Değiştir'i boş bırakın (hiçbir şey)
  5. Kontrol Düzenli ifade kutusu
  6. Click Bul butonuna

Not: Bu, OP'nin orijinal, 7 yıllık sorununa tam olarak hitap etmez, ancak SE'lerden buraya yollarını benzer "metnimi tek satırda nasıl edinebilirim" sorusuyla bulan bazı noob linux kullanıcılarına (benim gibi) yardımcı olmalıdır. .


1

Bugün aynı durumdaydı, vim veya nvim'de süper kolay, gJhatları birleştirmek için kullanabilirsiniz . Kullanım durumunuz için sadece yapın

99gJ

bu 99 hattınızın tümüne katılacak. 99Kaç satırın birleştirileceğine göre numarayı ihtiyaca göre ayarlayabilirsiniz . Sadece 1 satıra katılırsanız , o zaman sadece gJyeterince iyidir.


0

Bunu awk ile yapardım, örneğin

awk '/[0-9]+/ { a = a $0 ";" } END { print a }' file.txt

(bir dezavantaj, a'nın bellekte "biriktirilmiş" olmasıdır).

DÜZENLE

Printf'i unuttunuz! Bu yüzden de

awk '/[0-9]+/ { printf "%s;", $0 }' file.txt

veya muhtemelen daha iyisi, diğerlerinde awk kullanarak zaten verilmiş olan.


0

Bu usecase'i genellikle bir dosyadan bir kod parçacığı kopyalarken ve gereksiz yeni satırlar eklemeden bir konsola yapıştırmak istediğimde alıyorum, bir bash takma
adı yaptım ( onelinemerak ediyorsanız aradım )

xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i
  • xsel -b -o panomu okur

  • tr -d '\n' yeni satırları kaldırır

  • tr -s ' ' yinelenen boşlukları kaldırır

  • xsel -b -i bunu panoya geri iter

bundan sonra panonun yeni içeriğini bir konsolda veya her neyse oneline'a yapıştırırdım.


0

Garip bir kelime kaydırmayı düzeltmek için özellikle bunu GUI'de yapmanız gerektiğinde en açık ve hızlı cevabı kaçırıyorsunuz.

  • Açık gedit

  • Sonra Ctrl+ H, ardından Findmetin kutusuna \nve Replace withboş bir alana koyun, ardından onay kutusunu doldurun Regular expressionve tamamlayın.


0

Dosyanın sonundaki yeni satırı da kaldırmak için

python -c "s=open('filename','r').read();open('filename', 'w').write(s.replace('\n',''))"
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.