Powiedzmy, że kiedy wykonam polecenie ls, wynikiem jest:
file1 file2 file3 file4
Czy można wyświetlić tylko określoną kolumnę wyników, w tym przypadku plik2? Próbowałem następujących bezskutecznie:
echo ls | $2
Zasadniczo wszystko, co chcę zrobić, to echo tylko drugiej kolumny, w tym przypadku chcę echo:
file2
ls
wyjściem?ls
i po utworzeniu niektórych plików / folderów może nie być już tym, czego chcesz. Jak zauważył terdon, na pewno są lepsze sposoby na zdobycie tego, czego chceszOdpowiedzi:
Następujące polecenie sformatuje dane wyjściowe ls w jednej kolumnie
źródło
ls -1 /directory | head -2 | tail -1
lubls -1 /directory | perl -ne 'print if $. == 2'
ls | sed -n '1p;q'
wydaje się prostszySzukasz tego:
Jednak zakładając, że spróbujesz użyć tej nazwy pliku później, nie rób tego, ponieważ spowoduje to uszkodzenie nazw plików zawierających białe znaki. Zamiast tego umieść pliki w tablicy i pobierz drugi, co pozwoli uniknąć w ogóle parsowania:
Kolejność odzyskiwania plików zależy od wartości
LC_COLLATE
. Jako taki, możesz chcieć ustawićLC_COLLATE=C
najpierw, jeśli chcesz „standardowe” sortowanie we wszystkich przypadkach narożnych.źródło
1
w rozsądnych powłokach (zsh, yash, fish, csh, tcsh, rc, es ...) i od0
w ksh i bash. Aby uzyskać rozwiązanie przenośne dla wszystkich powłok podobnych do Bourne'a, możesz użyć:set -- *; printf '%s\n' "$2"
zamiast.Trzeba dodać,
-C
ponieważls
używa trybu jednokolumnowego, gdy wyjście nie jest terminalem.awk
następnie drukuje drugą kolumnę:źródło
Myślę, że szukasz
Nie będzie wyświetlać uprawnień, właściciela, grupy, daty, rozmiaru ... ale prostą nazwę pliku w pojedynczej kolumnie.
źródło
Jedynym sposobem, który działa dla mnie, jest dodanie „-all”. To jest:
Ponieważ
-all
dodaj więcej kolumn, takich jak użytkownik, uprawnienia itp.źródło
Jak już wspomniano - używanie kolumn do analizowania
ls
danych wyjściowych nie jest bardzo niezawodne, ponieważls
łamie linie zgodnie z długością nazw plików i szerokością terminali. Często interesujące jest wyświetlenie pojedynczej kolumny listy elementów. Możesz to zrobić za pomocą polecenia cut:wyświetli się
Zauważ, że
-d
pozwala wybrać separator kolumny, więc na przykład za pomocąmożesz wyświetlić drugą kolumnę listy oddzielonej przecinkami.
źródło
Załóżmy, że jeśli chcesz wyświetlić tylko konkretną nazwę pliku w bieżącej ścieżce, użyj polecenia poniżej
Komenda:
źródło
Jest to trudne, ponieważ parsowanie
ls -C
zależy od:ls -C
)ls -C
dane wyjściowe są kolumnowe, ale mogą być skonfigurowane do zmiennej liczby spacji jako separatorów pól.ls
wybranych wybranych opcji wyświetlania).Na razie zacznijmy od prostszego problemu ( tj. Nie nr 4 powyżej), zakładając , że w nazwach plików nie ma białych znaków . Aby wydrukować kolumnę nr 2, działa to:
Rozwijanie tego:
COLUMNS=$COLUMNS
gwarantuje, że podawana długość kolumny|
pozostaje spójna z bieżącym wyświetlaczem terminala. Zmiana ta do dowolnej wartości działa zbyt, więcCOLUMNS=50
alboCOLUMNS=70
spowodowałobyls -C
zmienić rzeczy według tych szerokościach.Inną metodą byłoby użycie
-w
przełącznika, np . :tr
zapewnia spójność separatorów pól: pojedyncza karta między każdą kolumną.cut
wyświetla żądaną kolumnę.źródło
w razie potrzeby zmień liczbę znaków (54), aby uzyskać tylko te dane, które chcesz.
źródło
54-
tells cut na każdą postać zaczynającą się na pozycji 54; nie kończy się na kolumnie „rozpoznany przez człowieka”