replace a particular text in all the files using single line shell command
-
22-09-2019 - |
Question
i have a renamed js file which i have to call in each of my php page. Now i want to replace that old name with the new one using shell. what iam using is this :-
sed -i ’s/old/new/g’ *
but this is giving the following error :-
sed: -e expression #1, char 1: unknown command:
now how can i do this replacement??
Solution
There are probably less verbose solutions, but here we go:
for i in *; do sed -i 's/old/new/g' "$i"; done
Mind you, it will only work on the current level of the file system, files in subdirectories will not be modified. Also, you might want to replace * with *.php, or make backups (pass an argument after -i, and it will make a backup with the given extension).
OTHER TIPS
sed -i.bak 's/old/new/g' *.php
to do it recursively
find /path -type f -iname '*.php' -exec sed -i.bak 's/old/new/' "{}" +;
You are using Unicode apostrophes (RIGHT SINGLE QUOTATION MARK - U2019) instead of ASCII (0x27) apostrophes around your sed
command argument.
this one is very simple, without for or loop, and takes care of any number or nested directories
grep -rl 'oldText' [folderName-optional] | xargs sed -i 's/oldText/newText/g'
perl -pi -e 's/old/new/g' *.php
For completeness, providing the OSX compatible version of the above accepted answer (to answer comment from @jamescampbell)
for i in *.php; do sed -i .orig 's/old/new/g' "$i"; done
This command creates .orig
backup files.
I know I'm really late but still:
find . -type f -name "*.php"|xargs sed -i 's/old/new/g'
Use Double quotes
sed -i "s/old/new/g" *
Try this:
ls | grep "php" > files.txt
for file in $(cat files.txt); do
sed 's/catch/send/g' $file > TMPfile.php && mv TMPfile.php $file
done