Help in find and replace.


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Help in find and replace.
# 1  
Old 06-24-2008
Question Help in find and replace.

Hi All,

I have the file in the following format.I need to change the password "tomcat","admin","mgr" and "testing" in the file with the encrypted passwords.
The encrypted passwords are given to me by another script.
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="role1" password="admin" roles="role1"/>
<user username="both" password="mgr" roles="tomcat,role1"/>
<user username="admin" password="testing" roles="admin,manager"/>
</tomcat-users>
Following is the script that I had started, But I am stuck with the perl -i command.the perl -i command works like a charm with the string, but not working with the variable. Can anyone please help.
Code:
#!/usr/bin/ksh
passwds=`awk -F"\"" '$3 ~ "password="{print $4}' tomcat-users.xml`
for i in $passwds
do
/opt/coreservices/tomcat-5.5.9/bin/digest.sh -a sha $i >temp
en_passwd=`awk -F ":" '{print $2}' temp`
perl -i.bak -pe's/(password=").*?"/$1$enpasswds"/' tomcat-users.xml

But this command works like a charm!!

Code:
perl -i.bak -pe's/(password=").*?"/$1abcd"/' tomcat-users.xml

Please let me know if sed -i command would work for this scenario.

Thanks for all the help!
# 2  
Old 06-24-2008
Quote:
perl -i.bak -pe's/(password=").*?"/$1abcd"/' tomcat-users.xml
Strange that $1 is substituted while enclose by single quotation marks, which prevent that for shell variables.

If you tend to use sed instead of perl (I am not that familiar with perl) you can just write something like (just an example):
Code:
sed 's/(password=").*?"/'${1}${enpasswds}'"/' tomcat-users.xml  > newfile

# 3  
Old 06-24-2008
Quote:
Strange that $1 is substituted while enclose by single quotation marks, which prevent that for shell variables.
$1 is not a shell variable but a Perl variable, since it is in the expression in single quotes passed to Perl with -e to execute, so there is no problem with it.
So is $enpasswds, but that has not been initialised in the Perl expression.
# 4  
Old 06-25-2008
sed command not working.

Thank you for all the replies!

The problem here is the sed command is not working.I need to make changes in the original file, tomcat-users file itself, so I tried the -i option. But that too isn't working..Smilie

Following id the command I tried.

Code:
sed -i's/(password=").*?"/'${1}${en_passwd}'"/'tomcat-users.xml

Can you please help!
# 5  
Old 06-25-2008
As spirtle stated, $1 and $enpasswds are perl variables. In the upper part of your shell script you define en_passwds, but I see nowhere, that you feed perl with that ie. something like in awk when you use -v to handover a shell variable to become the value of an awk variable.

I don't know the -i switch for sed, sorry.
# 6  
Old 06-25-2008
...

Code:
perl -i.bak -pe's/(password=").*?"/$1$ENV{en_passwd}"/' tomcat-users.xml

Do you want to use the same password for all users?
# 7  
Old 06-25-2008
Thanks Zaxxon. I tried exporting the variable en_passwd, so that perl can recognize it. It recognized the variable , but was not able to change the file.

I am looking into other options(sed or awk) to achieve this. My biggest problem is I need to exactly replace only the password in the file, by a variable.

For eg: password="tomcat"

I need to replace only tomcat in quotes after the password word, no matter how many times tomcat word is int he file.

Will post the solution, if I am able to find it.

Thanks!
nua7
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Find and replace?

Hi All, I have data like below 1 CREATE TABLE temp123 2 ( 3 col1 INTEGER, 4 col2 CHAR(3) CHARACTER SET LATIN NOT CASESPECIFIC, 5 col3 DECIMAL(19,0), 6 col4 VARCHAR(80) CHARACTER SET LATIN NOT CASESPECIFIC, 7 start_dt DAte FORMAT 'YY/MM/DD', 8 end_dt DATE FORMAT 'YY/MM/DD', 9 datecol1... (6 Replies)
Discussion started by: baranisachin
6 Replies

2. Shell Programming and Scripting

Find and Replace

i am having a file test1.txt and its contents is as follows. <abcaaa bbb ccc ddd> <dddeeeffff> <my computer> <abcmydocuments> Now I need to find the text abc and should be replaced as follows. <abc> <dddeeeffff> <my computer> <abc> First line has the text "abc" and it has to be... (3 Replies)
Discussion started by: kmanivan82
3 Replies

3. Shell Programming and Scripting

Find/Replace

I have the following requirement in the shell script 1. I have more than 200 shell script files. I need to find out how many shell scripts have "sqlplus /" in the shell file 2. I need to replace all the shell scripts in the single command for example: connect scott/scott replace as ... (6 Replies)
Discussion started by: pmsuper
6 Replies

4. Solaris

find/replace?

Dear All To find a file, according to you, I tried as: #find / -name file-name -print To find a string inside the files , I tried as : #find / -name "*" |xargs grep "string" Can you please let me know how can I try for find/replace (i.e. finding the intended string inside the text files... (6 Replies)
Discussion started by: hadimotamedi
6 Replies

5. Shell Programming and Scripting

Find Replace

Need to convert echo "7 6" to $7,$6 But the count of numbers can increase say echo "7,6,8,9" tried this didn't work echo "7 6" | sed 's/\(*\)/\1/' But did not help much (3 Replies)
Discussion started by: dinjo_jo
3 Replies

6. UNIX for Dummies Questions & Answers

find and replace

I am looking to find and replace a string in a file, can anyone suggest a global find and replace. looked at previous replies on other queries but none seem to address what i am looking for. aint familiar with sed so trying to use ordinary unix commands if possible Thanks in advance (2 Replies)
Discussion started by: SummitElse
2 Replies

7. Shell Programming and Scripting

find and replace

hi, i have a data in a file like below: 100 8388kmn844., 8488 200 8398kmn894., 8398 i want replace from kmn to . as null. output should be 100 8388, 8488 200 8398, 8398 Plz help. Thanks in advance (1 Reply)
Discussion started by: javeed7
1 Replies

8. Shell Programming and Scripting

find and replace

Hi, There are some "n" files in a directory which contains comman string.A command to find and replace the string in all the files without looping. like if i am in a directory : # find ./ -name ".txt" | xargs sed -e 's/test/tst' Upto here is performed correctly and i want to... (4 Replies)
Discussion started by: rakshit
4 Replies

9. UNIX for Advanced & Expert Users

Please help with find and replace:

Hi I am trying to find a product code hightlighted in red, and re-insert it at another place on the same file. I shall be grateful if anyone can help me with this. Stuck and have deadline!!:confused: Original Line: (I can get source data in one of these two formats) ISD=977155185403901+DIE... (2 Replies)
Discussion started by: gloovy_tb
2 Replies

10. UNIX for Dummies Questions & Answers

find and replace

I have statement like this column_id.columnname=="value" in unix i want to modify above statement to variable1=="value" that means i have to replace the string before "==" by string "variable1" second catch is, in statement instead of "==" you can have any arithmatic comarision... (7 Replies)
Discussion started by: mahabunta
7 Replies
Login or Register to Ask a Question