2010-06-28 13 views
66

Mam następujące dane i muszę umieścić to wszystko w jednej linii.Jak usunąć znaki nowej linii z pliku tekstowego?

mam to:

22791 

; 

14336 

; 

22821 

; 

34653 

; 

21491 

; 

25522 

; 

33238 

; 

muszę to:

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

EDIT

Brak tych poleceń działa doskonale.

Większość z nich niech dane tak:

22791 

;14336 

;22821 

;34653 

;21491 

;25522 
+11

Skopiuj i wklej do paska adresu przeglądarki lub innego pola tekstowego. Szybko, ale działa na niewielkie ilości danych. – ignis

Odpowiedz

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

Edit:

Jeśli żadna z poleceń zamieszczonych tu pracują, to masz coś innego niż nową linią oddzielającą swoich pól. Być może w pliku znajdują się końcówki linii DOS/Windows (chociaż spodziewałbym się, że rozwiązania Perla będą działać nawet w tym przypadku)?

Spróbuj:

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

Jeśli to nie poskutkuje, to będziesz musiał sprawdzić plik bliżej (na przykład w edytorze hex), aby dowiedzieć się, jakie znaki są faktycznie tam to ty chcę usunąć.

+0

Ten ostatni działa !! dzięki ... Te dane pochodzą z pliku rejestru Apache! ... Właściwie to nie wiem, czy został wygenerowany na Windowsie ... mój nauczyciel uni dał mi zadanie domowe! – Alucard

+17

Mam nadzieję, że usunięcie tych linii nie było twoją rzeczywistą pracą domową! –

+1

Drugi z \ r pracował dla mnie! – techblu3

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

Albo

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

Albo

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

Ta strona here ma kilka innych sposobów, aby usunąć nowe linie.

edytowane usunąć nadużycia kotów :)

+2

Prawidłowe, ale nadużywanie kotów. –

+0

Nigdy nie słyszałem tego terminu. Dzięki za wskazanie :) –

0
$ perl -0777 -pe 's/\n+//g' input >output
$ perl -0777 -pe 'tr/\n//d' input >output
6
paste -sd "" file.txt 
+1

W systemie Solaris (10) 'paste -sd" "' nie działa domyślnie na STDIN, więc jeśli używasz go, użyj: '(niektóre polecenie) | paste -sd "" -' – JohnGH

+0

To nie działa, jeśli chcesz również usunąć * final * newline. Usuwa jedynie pośrednie znaki nowej linii. – josch

+0

o ile mi wiadomo, użycie 'paste -sd '\ 0'' jest bardziej przenośne ... – Sundeep

0

by to zrobić, na przykład z awk

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

(wadą jest to, że jest "nagromadzony" w pamięci).

EDYTOWANIE

Zapomniałem o printf! Tak więc lub prawdopodobnie lepiej, co było już podane w innych ans przy użyciu awk.

1

Jeśli dane znajdują się w pliku.txt, a następnie:

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

do „$(<file.txt)” odczytuje plik i daje zawartość jako ciąg słów „Echo”, a następnie echa z przestrzeni między nimi. Polecenie 'tr', a następnie usuwa żadnych spacji:

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

Działa tak długo, dopóki dane wejściowe nie są zbyt duże i tak długo, jak używasz Bash (oznaczonego jako Bash, więc W porządku). Gdybym teraz napisał odpowiedź, byłby to "tr -d" \ n "

1

Korzystanie man 1 Ed:

# 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 
6
perl -p -i -e 's/\R//g;' filename 

musi wykonać zadanie.

1

xargs zużywa znaki nowej linii, jak również (ale dodaje ostateczną kończący znak nowej linii):

xargs < file.txt | tr -d ' ' 
3

użycie

head -n 1 filename | od -c 

dowiedzieć CO jest znakiem naruszającym przepisy. następnie użyć

tr -d '\n' <filename 

dla LF

tr -d '\r\n' <filename 

dla CRLF

1

Zakładając, że tylko chcesz zachować cyfry i średniki, to powinno wystarczyć, zakładając, że nie ma większych problemów z kodowaniem, o ile h usunie także ostatnią "linię nową":

$ tr -cd ";0-9" 

Możesz łatwo zmienić powyższe, aby dołączyć inne znaki, np. jeśli chcesz zachować znaki dziesiętne, przecinki itp.

1

Fałszywy fakt: zamiast tego użyj ASCII.

tr -d '\012' < filename.extension 

(Zmieniano Bo nie widział cholernie odpowiedź, która miała takie samo rozwiązanie, jedyną różnicą było to, że mój miał ASCII)

0

I zazwyczaj to USECASE kiedy jestem kopiowania fragmentu kodu z plik i chcę wkleić go do konsoli bez dodawania zbędnych nowe linie, skończyło się robi aliasu bash
(i nazwał go oneline jeśli jesteś ciekaw)

xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i 
  • xsel -b -o czyta mój schowek

  • tr -d '\n' usuwa nowe linie

  • tr -s ' ' usuwa powtarzające się spacje

  • xsel -b -i popycha ten z powrotem do mojego schowka

po tym chciałbym wkleić nowy zawartość schowka do oneline w konsoli lub cokolwiek innego.

1

Korzystanie z edytora tekstu gedit (3.18.3)

  1. Kliknij Szukaj
  2. Kliknij Znajdź i zastąp ...
  3. Wprowadź \n\s do Znajdź dziedzinie
  4. zostawić Zamień na puste (nic)
  5. Sprawdź Wyrażenie regularne box
  6. Kliknij Znajdź przycisk

Uwaga: to nie dokładnie zająć oryginalne, 7-letnią problemu PO, ale powinno pomóc niektórym użytkownikom noobem Linux (jak ja) którzy znajdują tu drogę od SE, z podobnymi pytaniami "jak mam otrzymać cały tekst na jednej linii".

Powiązane problemy