Jak usunąć wszystkie spacje z podanego pliku tekstowego


81

Chcę usunąć wszystkie spacje z podanego pliku tekstowego. Czy jest do tego dostępne jakieś polecenie powłoki? Lub jak używać seddo tego celu.

Chcę coś takiego poniżej:

$ cat hello.txt | sed ....

Próbowałem tego: cat hello.txt | sed 's/ //g'.Ale usuwa tylko spacje, a nie tabulatory.


3
przez „wszystkie białe spacje”, czy masz na myśli również nowe linie?
glenn jackman

Odpowiedzi:


133
$ man tr
NAME
    tr - translate or delete characters

SYNOPSIS
    tr [OPTION]... SET1 [SET2]

DESCRIPTION
   Translate, squeeze, and/or delete characters from standard 
   input, writing to standard output.

Aby wyczyścić wszystkie spacje, w tym znaki nowej linii, możesz spróbować:

cat file.txt | tr -d " \t\n\r" 

Możesz także użyć klas postaci zdefiniowanych przez tr (kredyty do komentarza htompkins ):

cat file.txt | tr -d "[:space:]"

Na przykład, aby usunąć tylko poziomą białą przestrzeń:

cat file.txt | tr -d "[:blank:]"

23
Możesz także użyć klas znaków zdefiniowanych przez tr. Przykłady: Aby usunąć wszystkie białe spacje: cat file.txt | tr -d "[:space:]" Aby usunąć wszystkie poziome spacje:cat file.txt | tr -d "[:blank:]"
htompkins

@ user3901666 usunie spacje, tak, jeśli wynik będzie zgodny z tym, co chcesz, trudno powiedzieć - czego próbowałeś?
Paulo Scardine,

24

O wiele prostsze moim zdaniem:

sed -r 's/\s+//g' filename

2
Właśnie to wypróbowałem i wyprowadza zmieniony tekst do STDOUT, ale nie zmienia samego pliku.
Max Williams,

4
@MaxWilliams - po prostu użyj flagi -i (kreska i) z
sedem

1
Nie usuwa to nowych linii, nie jestem pewien, czy było to pożądane przez OP.
Graeme Moss

11

Myślę, że możesz użyć seda, aby wyczyścić przestrzeń, nie tracąc przy tym informacji, jak przejście na inną linię.

cat hello.txt | sed '/^$/d;s/[[:blank:]]//g'

4
Dobrze, ale nie sądzę, żebym był w stanie zmusić się do pisaniatr -d " " < infile.txt > outfile.txt
NReilingh

Witam, to działa, ale byłbym wdzięczny za wyjaśnienie.
David Okwii

11

Spróbuj tego:

sed -e 's/[\t ]//g;/^$/d' 

(znalezione tutaj )

Pierwsza część usuwa wszystkie tabulatory ( \t) i spacje, a druga część usuwa wszystkie puste wiersze


1
To faktycznie działa. Spróbuj wyjaśnić sed -e 's / [\ t] // g; / ^ $ / d' szczególnie / ^ $ / d '. Wiem, że ^ oznacza początek łańcucha, $ oznacza koniec. / d służy do usuwania podczas używania seda. Ale w jaki sposób ta interpretacja prowadzi do usunięcia białych znaków?
David Okwii

Dodałem wyjaśnienie. ^$dopasowuje pusty wiersz, ponieważ szuka „początku wiersza” (^), a następnie bezpośrednio po nim „końca wiersza” ($).
Keyser


4

Najłatwiejszy sposób dla mnie ->

        echo "Hello my name is Donald" | sed  s/\ //g

2

To prawdopodobnie najprostszy sposób na zrobienie tego:

sed -r 's/\s+//g' filename > output
mv ouput filename

2

Spróbuj tego:

tr -d " \t" <filename

Zobacz stronę podręcznika tr (1) po więcej szczegółów.


2

Stary, po prostu python test.py w twoim terminalu.

f = open('/home/hduser/Desktop/data.csv' , 'r')

x = f.read().split()
f.close()

y = ' '.join(x)
f = open('/home/hduser/Desktop/data.csv','w')
f.write(y)
f.close()

Przepraszam, że wbijam stary wątek, ale czy nie jest f.read().strip("\t\n\r ")bardziej wydajny?
Jachdich

Co się stanie, jeśli pojawią się co najmniej dwie kolejne spacje, tabulatory itp. Czarno-białe słowa? Myślę, że twoje rozwiązanie dotyczy wiodących i końcowych odstępów. Jeśli chcesz mieć jedną wkładkę, możesz łatwo przekonwertować powyższy kod.
Agnibesh Chauhan

2

Ta odpowiedź jest podobna do innej, jednak niektórzy ludzie narzekają, że dane wyjściowe trafiają do STDOUT, mam zamiar zasugerować przekierowanie go do oryginalnego pliku i nadpisanie go. Normalnie nigdy bym tego nie sugerował, ale czasami szybkie i brudne prace.

cat file.txt | tr -d " \t\n\r" > file.txt

1

hmm ... wygląda na to, że coś w kolejności sed -e "s/[ \t\n\r\v]//g" < hello.txtpowinno być w odpowiednim miejscu (w każdym razie wydaje się działać pod cygwin).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.