Mam kilka plików tekstowych, które zawierają niektóre kolumny oddzielone różną liczbą spacji, ale zamiast tego potrzebuję jednej pojedynczej karty jako separatora. Czy można to zrobić w Bash?
linux
bash
text-manipulation
nieznany użytkownik
źródło
źródło
Odpowiedzi:
Aby przekonwertować sekwencje więcej niż jednej spacji na tabulację, ale pozostaw pojedyncze spacje w spokoju :
Aby to zrobić dla wielu plików:
lub
lub
źródło
sed: -e expression #1, char 1: unknown command: `.'
find
na dole.sed
nie lubi mieć spacji przed rozszerzeniem kopii zapasowej. Zredagowałem swoją odpowiedź. Dziękuję za raport.Jeśli twoja postać ma wiele kart, możesz także użyć
tr -s
:Na przykład:
Wszystkie białe spacje staną się jednym.
źródło
Możesz użyć,
sed
aby zastąpić wiele spacji tabulatorem:Przykład zamiany jednego lub więcej spacji na jedną kartę:
źródło
Najłatwiejsza odpowiedź, używając tylko
bash
:Jeśli istnieje zmienna liczba kolumn, można to zrobić, ale to będzie działać tylko na
bash
niesh
:na przykład
produkuje:
(między nimi jest zakładka, ale trudno ją zobaczyć, kiedy ją tu wkleję)
Możesz to również zrobić za pomocą
sed
lubtr
, ale zauważ, że obsługa pustych miejsc na początku daje różne wyniki.sed:
tr:
źródło
perl -p -i -e 's/\s+/\t/g' *.txt
źródło
Wypróbuj następujący skrypt SED:
Gdzie <TAB> naciska klawisz TAB.
źródło
To bardzo proste rozwiązanie:
sed zasadniczo działa w ten sposób (sed 's / old_pattern / new_pattern / g'). W tym przypadku stary wzorzec to „\ s +”, co oznacza znalezienie spacji raz lub więcej razy „+” i ukośnik odwrotny „\”, aby zinterpretować to jako wyrażenie regularne.
Nowym wzorcem jest tab „\ t”, który jest zapisany w formacie wyrażeń regularnych, a „g” oznacza zastąpienie wszystkich wierszy „globalnie”.
źródło