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.