how to replace a text inside a file based on a xml key


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting how to replace a text inside a file based on a xml key
# 1  
Old 03-09-2007
how to replace a text inside a file based on a xml key

<c-param>
<param-name>Number</param-name>
<param-value>22</param-value>
<description>my house number</description>
</c-param>
<c-param>
<param-name>Address</param-name>
<param-value>XYZ</param-value>
<description>my house Address</description>
</c-param>

I have a file and inside that there are lines as above. only unique key is the param-name ie. Number
Now i need to change the value of this param ie need to increase by 1 everytime whenever i run my script.

I am not able to find a direct way. can anyone tell me what is the best way.

1) there are multiple <c-param> in a file
2) there are <param-name> in a file but "Number" is different for each tab eg Number in one and Address in other
3) Value 22 can be some where else too so i need to update specifically related to Number only

Please let me know what is the best way
# 2  
Old 03-10-2007
If you have Python and you know the language, here's an alternative
Code:
import re,os
s = open("file").read()
stringtofind = "<param-name>Number</param-name>\n<param-value>(.*?)</param-value>"
pat = re.compile("%s" % stringtofind,re.M)
number = int(pat.findall(s)[0]) + 1
stringtosub = "<param-name>Number</param-name>\n<param-value>%d</param-value>" % number
replacement = re.sub(stringtofind,stringtosub,s)
open("temp","w").write(replacement)
os.rename("temp","file")

output:
Code:
<c-param>
<param-name>Number</param-name>
<param-value>23</param-value>
<description>my house number</description>
</c-param>
<c-param>
<param-name>Address</param-name>
<param-value>XYZ</param-value>
<description>my house Address</description>
</c-param>

# 3  
Old 03-10-2007
Code:
awk -F"[<>]" ' 
{
if( $0 ~ "<param-name>Number" ) 
{print; getline;no=$3+1;sub($3,no,$0); print; } 
else print 
} ' file

# 4  
Old 03-10-2007
Give a try on this ...
$1 is the filename entered through command line

(( x = $(sed -n '/<param-value>\([0-9]*\)</p' $1 | sed 's!\(<param-value>\)\([0-9]*\)\(</param-value>\)!\2!') + 1 ))
x="<param-value>$x</param-value>"
sed 's!\(<param-value>\)\([0-9]*\)\(</param-value>\)!'$x'! ' $1 >newxml
rm -f $1 && mv newxml $1
# 5  
Old 03-11-2007
Thanks Guys
I found out the solution, it may not be short but its working fine perfectly,
if you any other shorter one let me know

# get the line no of unique parameter ie Number
lineNo=`grep -n Number $fileName | awk -F":" '{print $1}'`
# Next line no
lineNo=`expr $lineNo + 1`

# get the current value in next value
curValue=`sed -n "${lineNo}p" $fileName | awk -F">" '{print $2}' | awk -F"<" '{print $1}'`
nextValue=`expr $curValue + 1`

rm -f temp.xml
# replace in that line only, and create a new file as sed does not change in original fiel
sed "$lineNo s/$curValue/$nextValue/" $fileName > temp.xml
rm -f $fileName
mv temp.xml $fileName
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Find replace text in xml file on the fly

Dear Unix guru, I have a .XML file which is being used to load data to oracle. This file comes on unix box and one of the tag in xml is oracle key word. I want to find that tag and replace with new tag on the fly For example I will get one of the tag in xml is as below <from>Test Test... (12 Replies)
Discussion started by: guddu_12
12 Replies

2. Programming

How to write in other language in text/xml file by reading english text/xml file using C++?

Hello Team, I have 2 files.one contains english text and another contains Japanese. so i have to read english text and replace the text with Japanesh text in third file. Basically, I need a help to write japanese language in text/xml file.I heard wstring does this.Not sure how do i write... (2 Replies)
Discussion started by: SA_Palani
2 Replies

3. Shell Programming and Scripting

Copy and paste text inside a xml file

I have a really big XML file. I need copy the value of one tag inside another one tag. I try to publish one example. <channel update="i" site="merge-xmltv" site_id="" xmltv_id="Rai 1">Rai 1</channel> <channel update="i" site="merge-xmltv" site_id="" xmltv_id="Rai 1 +2HD">Rai 1... (6 Replies)
Discussion started by: Tapiocapioca
6 Replies

4. Shell Programming and Scripting

Split xml file into multiple xml based on letterID

Hi All, We need to split a large xml into multiple valid xml with same header(2lines) and footer(last line) for N number of letterId. In the example below we have first 2 lines as header and last line as footer.(They need to be in each split xml file) Header: <?xml version="1.0"... (5 Replies)
Discussion started by: vx04
5 Replies

5. Shell Programming and Scripting

Shell or perl script to replace XML text in bulk

Hi, I am looking for assistance over shell or perl (without XML twig module) which replace string in XML file under particular branch..example of code file sample.. Exact requirment : Replace "Su saldo es" in below file with "Your balance" but only in XML branch of Text id=98 and Text Id=12... (7 Replies)
Discussion started by: Ashu_099
7 Replies

6. Shell Programming and Scripting

Replace text inside XML file based on condition

Hi All, I want to change the name as SEQ_13 ie., <Property Name="Name">SEQ_13</Property> when the Stage Type is PxSequentialFile ie., <Property Name="StageType">PxSequentialFile</Property> :wall: Input.XML <Main> <Record Identifier="V0S13" Type="CustomStage" Readonly="0">... (3 Replies)
Discussion started by: kmsekhar
3 Replies

7. Shell Programming and Scripting

Replace Filename and text inside of directory

I have a directory that has directories that contain Dir-20111114-xyz and I want to change them to Dir-20111121-xyz. Inside of Dir-20111114-xyz, I have a config.xml file that also contains the date that I need changed from 20111114 to 20111121 I have used sed to replace inside of file not... (4 Replies)
Discussion started by: icculus99
4 Replies

8. Shell Programming and Scripting

Replace text based on column

Replace these if the column is - p = q q = p r = s s = r input - PQRSSP + PQRS output - QPSRRQ + PQRS Some thing,like (5 Replies)
Discussion started by: bumblebee_2010
5 Replies

9. Shell Programming and Scripting

Replace Text Based On Pattern

Hi I'm trying to replace text in a file based upon a pattern. The pattern I'm looking for is: <styleURL>#style0002</styleURL> <name>#######6105#######</name>The # are seven alphanumeric characters before and after 6105. I need it to replace that with this recursively: ... (4 Replies)
Discussion started by: Grizzly
4 Replies

10. Shell Programming and Scripting

pattern replace inside text file using sed

Hi, I have a situation where I want to replace some occurrences of ".jsp" into ".html" inside a text file. For Example: If a pattern found like <a href="http://www.mysite.com/mypage.jsp"> it should be retained. But if a pattern found like <a href="../mypage.jsp"> it should be changed to... (4 Replies)
Discussion started by: meharo
4 Replies
Login or Register to Ask a Question