Mam kilka plików i lssortuję je w następujący sposób:
a
_b
c
ale chcę mieć
_b
a
c
Jak mogę to zrobić?
Mam kilka plików i lssortuję je w następujący sposób:
a
_b
c
ale chcę mieć
_b
a
c
Jak mogę to zrobić?
Odpowiedzi:
Jako jednorazowe polecenie możesz to zrobić:
LC_COLLATE=C ls
Możesz też dodać export LC_COLLATE="C"do .bashrc, aby ustawić go na stałe (może mieć nieoczekiwane sortowanie wyników w innym miejscu).
Więcej informacji na forach Ubuntu .
LC_COLLATE=Cls ustawia tradycyjny porządek sortowania POSIX, według ASCII, w którym wielkie litery występują przed podkreśleniem. Aby posortować podkreślenia przed dużymi literami, musisz znaleźć się pod maską i utworzyć niestandardową definicję ustawień regionalnych w / usr / share / i18n / locales.
LC_COLLATE=C lsnie działa, ale LC_ALL=C lsdziała.
Na wypadek, gdyby nie było wbudowanego sposobu, możesz użyć prostego zamiennika dla sort:
#!/usr/bin/env python
import sys
for i in sorted(sys.stdin):
sys.stdout.write(i)
Zapisz go, na przykład, w /bin/pysorti wykonaj jako ( sudo cp whatever.py /bin/pysorti sudo chmod a+x /bin/pysort), i uruchom go jako ls | pysort:
stefano@lenovo:~/t$ ls | pysort
_b
a
c
~/binale niezły awaria. Prawdopodobnie lepiej jest używać globowania w pythonie, ponieważ wyjście ls może być dziwne, jeśli nazwa pliku zawiera nowy wiersz.
by ls | sortnie zrobić dokładnie to, co trzeba?