Sugerowany przez Ciebie przykład (poniżej) nie działa, ponieważ faktycznie będziesz jednocześnie czytać i zapisywać do tego samego pliku.
$ cat filename | sort | uniq > filename
Idea z potokiem lub przekierowaniem polega na tym, że polecenie po lewej i prawej stronie każdej potoku lub przekierowania działa równolegle. Polecenie po prawej przetwarza informacje, które są mu przekazywane z polecenia po lewej stronie, podczas gdy polecenie po lewej stronie jest nadal uruchomione.
Aby scenariusz zadziałał, polecenie, które odczytuje z pliku, musiałoby zakończyć się przed uruchomieniem polecenia zapisującego do pliku. Aby to zadziałało, musisz najpierw przekierować dane wyjściowe do lokalizacji tymczasowej, a następnie, gdy to się skończy, wyślij je z lokalizacji tymczasowej z powrotem do pliku.
Lepszym sposobem na to jest w zasadzie jak w poprzednim przykładzie, w którym przekierowujesz do pliku tymczasowego, a następnie zmieniasz nazwę tego pliku z powrotem na oryginalny (z wyjątkiem tego, że nie musisz najpierw usuwać pliku, ponieważ przeniesienie usuwa dowolny istniejący cel) .
$ cat filename | sort | uniq > result
$ mv -f result filename
Możesz także zapisać go w zmiennej łańcuchowej, z tą różnicą, że działa tylko wtedy, gdy dane są wystarczająco małe, aby zmieścić się w pamięci jednocześnie.
echo $(cat filename | sort | uniq > result) > filenamelub coś ? Przechodząc, nie mam czasu, aby tego spróbować.