Próbuję usunąć linię z kilkuset plików. Poniższe robi dokładnie to, czego potrzebuję, ale nie zapisuje zmian (zgodnie z oczekiwaniami).
$ grep -v meow src/files
Widziałem to dołączanie >
na końcu danej komendy określi, gdzie powinien być zapisany bufor wyjściowy, ale czy działa to dla wielu plików?
Chciałbym wiedzieć, czy istnieje elegancki sposób masowej edycji za pośrednictwem terminala. Wszystkie przykłady, z którymi się zetknąłem awk
lub sed
zapewniają tylko rozwiązania do edycji jednego pliku na raz.
Odpowiedzi:
2 dla odpowiedzi № 1Jednym ze sposobów, aby to zrobić, jest skorzystanie z poniższego linku Perla:
perl -i.bak -n -e "print unless /meow/" src/files
Powinno to wykonać edycję wielu plików w miejscu. Oryginały są zapisywane w .bak
akta.
1 dla odpowiedzi nr 2
Innym sposobem na zrobienie tego jest wykonanie podobnej operacji z sed:
sed -i .bak "/meow/d" src/files/*
Perl ma swoje -i
opcja z sed, mimo wszystko. Zauważ, że aby nie używać pliku kopii zapasowej, potrzebujesz jawnie pustego rozszerzenia z przynajmniej niektórymi wersjami sed:
sed -i "" "/meow/d" src/files/*