Solved

shell script to recursively search and find/replace text in target files

Posted on 2011-02-16
7
545 Views
Last Modified: 2012-05-11
Hello All,

This is probaably a 1 minute solution for many script maseters, but for me is quite muddy.

Task:
1. Recursively search  all child directories for file WP-CONFIG.PHP
2. Find all "Lines" that begin with define('DB_PASSWORD', 'xxxxxx');   -- note 'xxxxxx' can be any length text.
3. Replace the 'xxxxxxx' text with new text that I would supply as paramter argument upon running the script.
4. Produce a count of the number of times the script found and editied a WP-CONFIG.PHP file.

Thats it.
0
Comment
Question by:Louis Capece
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
7 Comments
 
LVL 6

Expert Comment

by:de2Zotjes
ID: 34907589
#!/usr/bin/env bash

REPLACE=$1
n=0
for entry in $(find . -name WP-CONFIG.PHP -a -type f); do
    n=$(($n+1))
    sed -e "s/^define\('DB_PASSWORD','[^']*'/define('DB_PASSWORD','$REPLACE'/" -i $entry
done

echo $n

Open in new window


Line 3 takes the first command line argument and puts it in the REPLACE var
Line 5 uses the find utility to locate every file named WP-CONFIG.PHP under the current dir
Line 7 replaces every occurence of ....DB_PASSWORD with the text in REPLACE var
 

0
 
LVL 4

Expert Comment

by:florjan
ID: 34907612
find . -iname "WP-CONFIG.PHP" -print | xargs sed -i 's/oldpass/newpass/g'
grep -lr "newpas" .

Open in new window

Make sure to escape(backslash\ any special characters) and to tell me if there is any other line same as password so I can adapt the script/
0
 
LVL 31

Expert Comment

by:farzanj
ID: 34907632
1.  ls -R WP-CONFIG.PHP
or  find . -type f -name WP-CONFIG.PHP
2. grep -R '^define(\'DB_PASSWORD\''

3.  sed "s/xxxxx/yyyyy/g" $1
4.  #Before modifying the script
     Precount=$(grep -c "XXXX" WP-CONFIG.PHP)
     #Edit using above
     Postcount=$(grep -c "XXXX" WP-CONFIG.PHP)
     Edited=$(( Precount - Postcount ))
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:Louis Capece
ID: 34909944
Could someone please confirm this, I suspect there may be confusion...
the existing password is NOT known, it could be anything that is beween the single quotes.

In a nutshell, what I an trying to do is alter all the WP_CONFIG.PHP "Define Password" statement to a single value....the existing passwords are all different.
0
 
LVL 12

Expert Comment

by:tel2
ID: 34910642
Hi louiscapece,

de2Zotjes's solution seems to cater for any existing password.
But I don't think it caters for the space you have between the comma and the 'xxxxxx' (old password).  To make it flexible in this regard (i.e. to handle 0 or more spaces there), maybe change line 7 to something like this:
    sed -e "s/^define\('DB_PASSWORD', *'[^']*'/define('DB_PASSWORD', '$REPLACE'/" -i $entry
0
 
LVL 4

Accepted Solution

by:
florjan earned 500 total points
ID: 34910645
find . -iname "WP-CONFIG.PHP" -print | xargs sed -i "s/('DB_PASSWORD', '.*')/('DB_PASSWORD', 'newpassword')/g"
grep -lr "newpas" .

Open in new window

0
 
LVL 4

Expert Comment

by:florjan
ID: 34910669
I have tested script from my last post on gentoo on my test wp install in bash and it worked.
0

Featured Post

Ransomware-A Revenue Bonanza for Service Providers

Ransomware – malware that gets on your customers’ computers, encrypts their data, and extorts a hefty ransom for the decryption keys – is a surging new threat.  The purpose of this eBook is to educate the reader about ransomware attacks.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Linux users are sometimes dumbfounded by the severe lack of documentation on a topic. Sometimes, the documentation is copious, but other times, you end up with some obscure "it varies depending on your distribution" over and over when searching for …
The purpose of this article is to demonstrate how we can upgrade Python from version 2.7.6 to Python 2.7.10 on the Linux Mint operating system. I am using an Oracle Virtual Box where I have installed Linux Mint operating system version 17.2. Once yo…
Connecting to an Amazon Linux EC2 Instance from Windows Using PuTTY.
How to Install VMware Tools in Red Hat Enterprise Linux 6.4 (RHEL 6.4) Step-by-Step Tutorial

732 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question