Jeśli chcesz ściśnąć „białą spację”, będziesz chciał użyć predefiniowanych zestawów znaków tr „: blank:” (pozioma biała spacja i spacja) lub „: space:” (verical biała spacja):
/bin/echo -e "val1\t\tval2 val3" | tr -s "[:blank:]"
Przykłady uruchomiono na Red Hat 5 (GNU tr).
W moim przypadku chciałem znormalizować wszystkie białe spacje do jednej spacji, aby móc polegać na spacji jako delmiterze.
Jak wskazał drugi komentarz dastrobu, brakowało mi sformułowania na stronie podręcznika:
-s uses the last specified SET, and occurs after translation or deletion.
To pozwala nam wyeliminować pierwszy tr. Kudo będzie szukał swoich cierpliwości w obliczu mojej gęstości.
Wcześniej parsowanie portu z konfiguracji Redis. plik:
grep "^port" $redisconf | tr "[:blank:]" " " | tr -s "[:blank:]" | cut -d" " -f2
Po, z ustawieniem SET2 za pomocą ściśnięcia:
grep "^port" $redisconf | tr -s "[:blank:]" " " | cut -d" " -f2
Wynik:
6379
Więcej informacji na temat niuansów białych znaków
Zademonstruj, gdzie samo ściśnięcie kończy się niepowodzeniem, gdy w grę wchodzą kolejne mieszane postacie należące do klasy znaków [: blank:]:
/usr/bin/printf '%s \t %s' id myname | tr -s "[:blank:]" | od -cb
0000000 i d \t m y n a m e
151 144 040 011 040 155 171 156 141 155 145
0000013
Uwaga: Moje dwa pola ciągów w formacie printf są oddzielone 1 spacją, 1 tabulacją, 1 spacją. Po ściśnięciu ta sekwencja wciąż istnieje. Na wyjściu zrzutu ósemkowego jest to reprezentowane przez sekwencję ascii 040 011 040.