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??

Was it helpful?

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
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top