Próbuję grep
przesyłać dane wyjściowe do potoku rm
, ale generuje to bezużyteczne rzeczy. Czy wymagany jest jakikolwiek przełącznik rm
? Czy może rm
być bezpośrednio wyrażeniem regularnym?
ls | grep '^\[Daruchini'| rm
rm: brakujący operand Aby uzyskać więcej informacji, wypróbuj `rm --help '.
Odpowiedzi:
Musisz użyć,
xargs
aby zamienić standardowe dane wejściowe na argumentyrm
.(Uważaj na znaki specjalne w nazwach plików; w GNU grep możesz preferować
)
Ponadto, chociaż powłoka nie używa wyrażeń regularnych, jest to prosty wzorzec:
(tymczasem myślę, że potrzebuję więcej snu.)
źródło
rm Dar*
, nierm !(Dar*)
.zsh
^
trybie (podobnie dobasg
!
rzeczy).| tr "\n" "\0"
przedxargs
bit. Widziane w tym poście: stackoverflow.com/questions/20307299/…Nie analizuj danych wyjściowych
ls
.Tutaj bardzo łatwo jest uzyskać powłokę do filtrowania żądanych plików. Zauważ, że to powłoka rozwija wzór
Dar*
, a nierm
polecenie. Rozwinięcie wzorca wykonywane przez powłokę nazywa się globowaniem .W bardziej skomplikowanych przypadkach wyszukaj
find
polecenie.źródło
Jeśli chcesz ograniczyć dane wyjściowe
grep
znakami nowej linii zamiast białych znaków, możesz to określićxargs
za pomocą-d
opcji.(jak opisano w tym pytaniu)
źródło
Do przekazywania danych wyjściowych jako argumentu zwykle używam pętli while, ponieważ nie znam xargs.
źródło
Najlepszym dla mnie poleceniem jest:
źródło