Help with find and replace in XML


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help with find and replace in XML
# 1  
Old 12-12-2009
Help with find and replace in XML

Hello Guys,

I have this requirement with several hundred files.

I have this first set of xml's files with the following tags spread across the file

FILE in SET A

<Name>Lion</Name>
<Age>15</Age>
.....
....
...

<Date>2009-12-12</Date>

Now i have this another set of files which also have the same tags again randomly spread across in the file.

FILE SET B


<Name>xxxx</Name>
......
......

<Age>yyy</Age>
.....
....


<Date>zzzz</Date>

My requirement is that i have around 6 matching tags in both the files.I need replace the data between those matching the tags in SET B with that of SET A.

I am currently thinking in 2 lines:

1. Either replacing the tags completely.
2. Replacing only data within the matching tags.

Can anyone please suggest me how to implement this?

Cheers!!
# 2  
Old 12-12-2009
bash. 4.0 with associative arrays

Code:
# bash 4.0
declare -A dict
while read -r line
do
    case "$line" in
        "<Name>"*|"<Age>"*)
            tag=${line%%>*}
            tag=${tag#*<}
            val=${line#*>}
            val=${val%%<*}
            dict["$tag"]="$val"
            ;;
    esac
done <"file"
while read -r line
do
    case "$line" in
       "<Name>"*|"<Age>"*)
        tag=${line%%>*}
        tag=${tag#*<}
        line="<$tag>${dict["$tag"]}</$tag>"
    esac
    echo $line
done <"file2"

you could do the same with awk, otherwise, ideally you should get a good XML parser.

Last edited by ghostdog74; 12-12-2009 at 03:31 AM..
# 3  
Old 12-13-2009
Will this work on korn shell, can you suggest the awk option please?

Also in what you have shown below, i have as mentioned before have 6 tags which need data replacement, so how do i go about?? Smilie
# 4  
Old 12-13-2009
Is there a one to one correspondence between the files in setA and the files in setB, i.e. does the first file in setA correspond to the first file in setB and so on?
# 5  
Old 12-13-2009
No, there is no such correspondence.
# 6  
Old 12-13-2009
So how are you supported to find the file in setB that is to be modified? Are saying that the "6 matching tags" will uniquely identify the particular file in setB which is to be modified?

How many files are in setA and how many files are in setB?
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. Solaris

XML value compare and replace

I need a way to to check if a value in a file that has this XML format is less than or equal to current system date/time. if it is I need to override it with a future date/time: Here is the data sample: <?xml version="1.0"... (1 Reply)
Discussion started by: mrn6430
1 Replies

3. Shell Programming and Scripting

Need to replace XML TAG

As per the requirement I need to replace XML tag with old to new on one of the XML file. Old<com : DEM>PHI</com : DEM> New<com : DEM>PHM</com : DEM> Please someone provide the sed command to replace above mentioned old XML tag with new XML tag (2 Replies)
Discussion started by: siva83
2 Replies

4. Shell Programming and Scripting

Find and replace in xml

Hi All, My XML file looks like below: <logEvent xsi:type="logservice:LogEvent" timestamp="1394713811052" severity="3" messageCode="TM_6228" message="Writing session output to log file ." user="" stacktrace="" service="" serviceType="IS" clientNode="dev" pid="712" threadName="DIRECTOR"... (3 Replies)
Discussion started by: galaxy_rocky
3 Replies

5. Shell Programming and Scripting

Find and replace from an XML

Input-xml <weblogic-web-app> <session-descriptor> <session-param> <param-name>SysName</param-name> <param-value>smilyface</param-value> </session-param> <session-param> <param-name>InternetProtocol</param-name> <param-value>xxxxxxxx</param-value> ... (2 Replies)
Discussion started by: linuxadmin
2 Replies

6. Linux

Linux command to find and replace occurance of more than two equal sign with "==" from XML file.

Please help me, wasted hrs:wall:, to find this soulution:- I need a command that will work on file (xml) and replace multiple occurrence (more than 2 times) Examples 1. '===' 2. '====' 3. '=======' should be replaced by just '==' Note :- single character should be replaced. (=... (13 Replies)
Discussion started by: RedRocks!!
13 Replies

7. Shell Programming and Scripting

Find Node and replace line(s) preceding in xml file

Hello, I have an xml file whose contacts are like below: <Node>Apple <B>Value1</B> <B>Value2</B> <B>Value3</B> </Node> <Node>Mango <B>Value1</B> <B>Value2</B> <B>Value3</B> </Node> <Node>Apple <B>Value1</B> <B>Value2</B> <B>Value3</B> </Node> <Node>Bannana (3 Replies)
Discussion started by: umarsatti
3 Replies

8. Shell Programming and Scripting

Find/Replace in XML file

I am not sure how to approach this find/replace using a shell script. Any help or guidance appreciated. I want to find this: <objects/> <thumb>thumb_0001.jpg</thumb> <preview>preview_0001.jpg</preview> And replace with something like this: <objects>... (1 Reply)
Discussion started by: jimraynor
1 Replies

9. UNIX for Dummies Questions & Answers

replace %20 in xml file

Hi, I'd like to use sed in order to replace %20 and other "special" characters that are represented with % and some number combination in xml file. Typical line looks like this: /Users/imac1/Music/iTunes/iTunes... (6 Replies)
Discussion started by: andrejm
6 Replies

10. UNIX for Dummies Questions & Answers

find and replace in XML

Hi I need one clarication.. I have an xml having many entries like this.. <Cust_Name>Tom Cruise</Cust_Name> I want to rename this to <Cust_Name>TEST</Cust_Name> Pls let me know how to do it.. I was trying some basic commands like grep 'Cust_Name' * | tr '>' ',' | tr '<' ... (2 Replies)
Discussion started by: wip_vasikaran
2 Replies
Login or Register to Ask a Question