Jak „wyszukiwać i zamieniać” wiele plików?

11

Korzystam z greppolecenia, aby wyszukać ciąg w wielu plikach. Czy istnieje coś podobnego do „wyszukaj i zamień”?

Tom Brito
źródło

Odpowiedzi:

19

Szukasz sedpolecenia. Na przykład, aby zamienić „psa” na „kota” we wszystkich plikach tekstowych w bieżącym katalogu:

sed -i 's/dog/cat/' *.txt
Jjed
źródło
1
Prosty i miły.
Luis Alvarado
1

przychodzi mi na myśl sed. Przykład:

sed s/cat/dog/ <input >output

To wyszukuje kota w linii i umieszcza psa na swoim miejscu w pliku wejściowym i zapisuje do pliku wyjściowego.

Kerkdyk
źródło
1

sedjest właściwym narzędziem; ale alternatywnie możesz nawet używać expoleceń w vim:

vim -c 'args <files> | argdo %s/cat/dog/g | x'

gdzie <files>jest lista plików lub wzorców, w których chcesz dokonać podstawienia.

jcollado
źródło
uwaga argdo nie jest POSIX pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html
Steven Penny
0

Możesz używać Vima w trybie Ex:

for b in *.txt
do
  ex -sc '%s/OLD/NEW/g|x' "$b"
done
  1. % wybierz wszystkie linie

  2. s zastąpić

  3. g zamień wszystkie wystąpienia w każdej linii

  4. x Zapisz i zamknij

Steven Penny
źródło