Chcę usunąć nową linię \n
tylko z końca pliku w systemie UNIX
np.Usuń znak nowej linii z końca pliku
abc
def
ghi
wyjście powinno być
abc
def
ghi
W końcu pliku nie powinno być pojedynczym \n
Chcę usunąć nową linię \n
tylko z końca pliku w systemie UNIX
np.Usuń znak nowej linii z końca pliku
abc
def
ghi
wyjście powinno być
abc
def
ghi
W końcu pliku nie powinno być pojedynczym \n
Generalnie, narzędzia tekstowe Unix są szczęśliwsi jeśli zrobić mieć nowej linii na koniec ostatniej linii w pliku. Dlaczego musisz go usunąć?
Nie możesz tego zrobić (o ile wiem) z awk
, ale łatwo z perl
:
perl -e 'undef $/; $_ = <>; s/\R\z//; print'
EDIT: lat później przychodzi mi do głowy, że może mieć na myśli „jak usunąć kończące puste linie od końca pliku "; Innymi słowy, być może chciałbyś zredukować liczbę dwóch lub więcejkolejnych linii nowego do jednej, tylko na końcu pliku. Ponownie jest to najłatwiejszy z perl
:
perl -e 'undef $/; $_ = <>; s/\s+\z/\n/; print'
(To będzie zorch arbitralne spływu whitespace znaki, nie tylko nowymi liniami To prawie na pewno to, co chcesz.).
Można:
perl -pe 'chomp if eof' file1 > file2
Przykład:
$ cat file1
abc
def
ghi
$ perl -pe 'chomp if eof' file1 > file2
$ cat file2
abc
def
ghi$
Nie mogę usunąć \ n z pliku, z powyższego skryptu – Jayashri
Uwaga, jeśli 'plik1' jest taki sam jak' plik2', to może usunąć plik . Być ostrzeżonym. Zdarzyło mi się. Na szczęście znałem zawartość. –
Spodziewam się, że to nie zadziała, przynajmniej niezawodnie, ponieważ 'eof' staje się prawdziwe tylko wtedy, gdy próbujesz odczytać * po końcu * pliku, co niekoniecznie miało miejsce w trybie' -pe', gdy ' $ _' to ostatnia linia pliku. – zwol
awk '{if (NR == 1 && $ 0 ~ /> /) {print $ 0; next} if ($ 0 ~/^> /) {print "\ n" $ 0; next} else {printf ("% s" , $ 0)}} 'filename Próbowałem powyższego skryptu, ale usuwa on wszystkie \ n , ale chcę, aby \ n istniejące na końcu pliku zostały usunięte. – Jayashri
Jaki język? Jaka platforma? – Oded
Unix, Próbowałem za pomocą skryptu poleceń awk – Jayashri