http://www.perlmonks.org?node_id=963115


in reply to Re^3: s// All Files In Directory
in thread s// All Files In Directory

So perl -p -i -e 's/5/6/g' will do what I want?
--perl.j

Replies are listed 'Best First'.
Re^5: s// All Files In Directory
by stevieb (Canon) on Apr 02, 2012 at 20:53 UTC

    No. You have to add the file names you want to work with after the command. In your case you want to work with all files, so append an asterisk (*). Also, add a file extension to 'i' if you want to create a backup:

    perl -pi.bak -e 's/5/6/g;' *

    ...will create a copy of each file with a .bak extension before performing the search/replace. If you only want to affect certain files, name them explicitly, or use glob patterns. For instance, the following will only work on files with a .txt extension:

    perl -pi -e 's/5/6/g;' *.txt
      That depends entirely upon the shell. Bash will turn *.txt into a list of files. cmd.exe will not.

      This doesn't seem to be working...

      Can't open *: Invalid argument.

      --perl.j

        A wild guess: On Windows, you used to have to use *.* to match all files, while a single * would only match files with no extension. Is that still the case?

        Aaron B.
        My Woefully Neglected Blog, where I occasionally mention Perl.

        To tame the cmd you could use the brilliant idea which I read by BrowserUK (cannot find the link just now) - the following one-liner works on my windows pc:
        perl -pi.bak -e "BEGIN{@ARGV=map{glob}@ARGV;}s/5/6/g;" *