2012-06-26 10 views
14

Poszukuję polecenia basha, aby znaleźć pliki z końcowymi spacjami na końcu każdej linii. Nie jestem zainteresowany usuwaniem spacji, tylko poszukiwaniem plików.Bash: znajdź pliki z końcowymi polami na końcu wierszy

+2

UWAGA: Podczas sformułowanie pytania (jak to pisze) jednoznacznie wzywa do znajdowania plików z końcowymi spacjami w _each i każdej linii_, niezwykłość tego wymogu zaowocowała kilkoma odpowiedziami - szczególnie tymi z większością głosów - znajdując pliki z _jednymi lub więcej_ liniami z końcowymi spacjami. – mklement0

+0

sed -n '/ \ + $/p' nazwa pliku – Luv33preet

Odpowiedz

1

Znajdź pliki z jednego lub więcej końcowe znaki kosmicznych:

find . -name "*" | xargs egrep ".* +$" 
+0

Uważam, że pierwotne pytanie dotyczyło znalezienia plików, które mają końcowe spacje na WSZYSTKICH liniach. Jednak może to być po prostu złe sformułowanie. – Nit

+0

@Nie mówi wyraźnie w ciele, musiało to ominąć, ale nagłówek pytania może być niejednoznaczny. – matcheek

+0

Poszerzając swoje rozwiązanie, 'egrep -m1 -v -l". * + $ "' Powinno znaleźć wszystkie pliki, które ** nie ** mają spacje końcowe w każdym wierszu, jeśli się nie mylę? – Nit

25

Znajdź pliki, które spacje.

find . -type f -exec egrep -l " +$" {} \; 
+0

Podczas gdy możesz zrobić Zrób to z 'grep', jak pokazały inne odpowiedzi, użycie' find' może nadal być dobrym pomysłem, jeśli chcesz mieć większą kontrolę nad tym, które pliki przeanalizować., Możesz uczynić komendę 'find' o wiele bardziej wydajną, używając' ' + 'zamiast' \; 'do zakończenia podstawowej' -exec' - to wywoła 'egrep' (zazwyczaj) tylko _once_, z _all_ nazwami plików – mklement0

+0

Zauważ, że ta odpowiedź znajduje pliki o _at co najmniej 1_ linii z tra iling spacje. To z pewnością może się przydać i jest prawdopodobnie najczęstszym przypadkiem użycia, ale nie jest tym, o co prosił OP (co najmniej tak sugeruje ich sformułowanie, "pod koniec _leach_ line"). – mklement0

8

Jeśli celem jest do listy plików, które końcowe spacje w jednej lub kilku liniach:

grep -r '[[:blank:]]$' . 

nie do druku wiersze i tylko wydruk tylko nazwy plików, również określić opcję -l . To jest l jak w słowie list, a nie numer 1.

+1

pytanie brzmi: "na końcu ** każdej ** linii" – Sorin

+1

@Sorin Zgaduję, że nie była to intencja OP, ale przyznają, że pytanie faktycznie tak mówi, wzięte dosłownie ... – twalberg

+0

@twalberg, to jest to, co sprawia, że ​​nie jest to banalne pytanie, które byłoby warte trzeciej prawie identycznej odpowiedzi – Sorin

1

Istnieje możliwość wyświetlenia plików, które nie zawierają nigdzie w nich miejsca; użyj tego i wyrażenia regularnego dla postaci innej niż spacja tuż przed końcem linii.

grep -L '[^ ]$' * 

Aby recurse katalogi, dodaj -r. Aby wyszukać również inne białe znaki, użyj klasy znaków $'[^ \t]$' lub POSIX '[^[:blank:]]$' dla wyrażenia regularnego.

+0

Ładnie wykonane. To naprawdę zwraca tylko pliki WSZYSTKIE, których wiersze mają spacje końcowe - z jednym wyjątkiem: pliki _empty_ (zero-bajtowe) są również dopasowane. Ponadto użycie '*' (bez '-r') spowoduje ostrzeżenia dla podkatalogów, jeśli takie istnieją. '-L' nie jest zgodny z POSIX, ale jest szeroko obsługiwany, biorąc pod uwagę, że zarówno GNU grep, jak i BSD sed go implementują. – mklement0

+1

@ mklement0 Przyjemny połów na pliki o zerowym rozmiarze. Możesz użyć '-s', aby pominąć ostrzeżenia o katalogach, lub użyj' -r .', jeśli chcesz przejść przez całe drzewo katalogów (OP był niespecyficzny w stosunku do zadania). – tripleee

0

Jeśli pytanie jest dosłownie znaleźć pliki, które mają puste na końcu każdej linii, to powinno działać:

grep -rL '[^[:blank:]]$' . 

-L mówi grep zgłosić każdy plik, który nie pasuje do wzorca , a wzór szuka linii, które nie mają spacji bezpośrednio poprzedzającej znak nowej linii.

0

Korzystanie ack (lub ag):

ack -l ' \n' 

Uwaga: Podobnie jak niektóre inne odpowiedzi, to będzie lista plików, które zawierają jeden lub więcej linie z przestrzeni spływu.

1

Jeśli celem jest lista plików z końcowe spacje w bieżącą ścieżkę:

grep -rli '[[:blank:]]$' . 
Powiązane problemy