В зависимости от того, хотите ли вы это рекурсивно или нет, Perl будет хорошим вариантом:
Найти, не рекурсивно:
perl -nwe 'print "Found $_ in file $ARGV\n" if /jacketprice/' *.html
Будет печатать строкугде найдено совпадение, за которым следует имя файла.Может быть немного многословным.
Заменить, не рекурсивно:
perl -pi.bak -we 's/jacketprice/coatprice/g' *.html
Будет хранить оригинал с прикрепленным расширением .bak
.
Найти, рекурсивно:
perl -MFile::Find -nwE '
BEGIN { find(sub { /\.html$/i && push @ARGV, $File::Find::name }, '/dir'); };
say $ARGV if /jacketprice/'
Будет напечатано имя файла для каждого совпадения.Несколько менее многословным может быть:
perl -MFile::Find -nwE '
BEGIN { find(sub { /\.html$/i && push @ARGV, $File::Find::name }, '/dir'); };
$found{$ARGV}++ if /jacketprice/; END { say for keys %found }'
Заменить рекурсивно:
perl -MFile::Find -pi.bak -we '
BEGIN { find(sub { /\.html$/i && push @ARGV, $File::Find::name }, '/dir'); };
s/jacketprice/coatprice/g'
Примечание: Во всех рекурсивных версиях /dir
каталог нижнего уровня, который вы хотите найти.Кроме того, если ваша версия perl меньше 5.10, say
можно заменить на print
с последующим переводом строки, например, print "$_\n" for keys %found
.