czwartek, 12 listopada 2009

Edycja wielku plików pod linux z danym ciągiem znaków

Jeśli musisz w jednym pliku zastąpić wszystkie wystąpienia danego ciągu znaków, to z pomocą przychodzą już porządne edytory tekstu, które pozwalają bez problemu na taką operację. Co jednak jeśli posiadasz wiele plików (powiedzmy 100), do tego rozmieszczonych w różnych podkatalogach, gdzie musisz zastąpić wszystkie wystąpienia danego ciągu znaków, bo np. popełniłeś ten sam błąd, o którym sprawę zdałeś sobie dopiero teraz?

Pomocny w takim momencie będzie BASH, Grep oraz jakiś język skryptowy (np. perl)... no to do dzieła:

$ grep -rl STARY_STRING . | xargs perl -pi~ -e 's/STARY_STRING/NOWY_STRING/'


grepem najpierw wyszukujemy rekurencyjnie (w podkatalogach) wszystkich plików, w których występuje dany ciąg znaków (wtedy linijka w perlu ma mniej do roboty), następnie podanym kodem zamieniamy wszystkie wystąpienia na nowy ciąg znaków, np:

$ grep -rl '%22' . | xargs perl -pi~ -e 's/'%22'/''/'


Jeśli chcesz przekopiować podany wyżej kod, to usuń znak zachęty "$" dolara.

Brak komentarzy:

Prześlij komentarz