Replace string in XML file with awk/sed with string from another


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Replace string in XML file with awk/sed with string from another
# 1  
Old 02-12-2016
Replace string in XML file with awk/sed with string from another

Sorry for the long/weird title but I'm stuck on a problem I have. I have this XML file:

Code:
</member>
     <member>
      <name>TransactionID</name>
      <value><string>123456789123456</string></value>
     </member>
     <member>
      <name>Number</name>
      <value><string>765101293</string></value>
     </member>

There, I have to replace the "765101293" with another value from another file, file2:

Code:
765003448
765885388
764034143
784478101
762568592
769765134
767200702
769550613
784914007
762333840

So, the XML file will change at each new string from file2. I am not sure how to do this. I am thinking of first processing file2 with awk and then a pipe feeding into sed:

Code:
#! /bin/bash -f

var=`awk -F,"\n" '{print $0}' "$1"`
sed -i "/7[0-9]{8}/c\$var/" "$2"

However, this does nothing. Could anyone help me out?
Moderator's Comments:
Mod Comment Please use CODE tags (not ICODE tags) for full-line and multi-line sample input, sample output, and code segments.

Last edited by cozzin; 02-12-2016 at 05:10 AM.. Reason: Change ICODE tags to CODE tags.
# 2  
Old 02-12-2016
I don't understand what output you are hoping to produce...

Do you want one output file for each line in file2? Do you want one output file with a copy of all of the text in your XML file for each line in file2?

What is the name of your XML file?

What is/are the desired name/names of your output file/files?

What are $1 and $2 in your script?
# 3  
Old 02-12-2016
So, I would like to update my XML file (Update.xml) with the data from file2. For the first line of file2, I will have to update the existing XML: instead of "765101293" i'll put the first line of file2 > 765003448. Then I'll move the xml somewhere else, and then I'll pass to the next line on file2. Repeat the process for all lines of file2. The two variables $1 and $2 I used when I run my script like this: ./script.sh file2 Update.xml. Hope this makes a bit more sense.
# 4  
Old 02-12-2016
Still not clear. In your sample, the first line is </member> indicating there's more to that file upfront, e.g. other <member> elements. Which one should be modified? The one and only containing exactly the string 765101293?

Do you need the entire Update.xml file copied to another path after each replacement? Or just that <member> element?
# 5  
Old 02-12-2016
There is more to the file, but the bit that I'm interested in and where I want to make the change is the one I supplied. At the end, I'll copy the whole file, not just that bit.
# 6  
Old 02-12-2016
Try this, which may not be the most efficient way, but, due to missing further details, ...:
Code:
while read var; do sed "s/765101293/$var/" Update.xml > file_$var; done < file2

# 7  
Old 02-15-2016
This works, but only for765101293; I've tried with multiple types of regex, but none have worked . I'll give more details about what I want it to do. I want to replace the string "76.." from this block
Code:
<name>subscriberNumber</name> <value><string>765101293</string></value>

with values from file2. Then, the xml will be copied somewhere else and the next value should be put there. For example, this will be the first iteration:
Code:
<name>subscriberNumber</name> <value><string>765003448</string></value>

; the second one:
Code:
<name>subscriberNumber</name> <value><string>765885388</string></value>

And so on; the xml will be overwritten everytime.

Also, here you can see the full xml file.

Code:
<methodCall>
 <methodName>UpdateOffer</methodName>
 <params>
  <param>
   <value>
    <struct>
     <member>
      <name>offerID</name>
      <value><i4>19</i4></value>
     </member>
     <member>
<name>startDate</name>
<value><dateTime.iso8601>20151028T14:11:00+0200</dateTime.iso8601></value>
</member>
     <member>
      <name>offerType</name>
      <value><i4>0</i4></value>
     </member>
     <member>
      <name>originHostName</name>
      <value><string>TEST</string></value>
     </member>
     <member>
      <name>originNodeType</name>
      <value><string>Prepaid</string></value>
     </member>
     <member>
      <name>originOperatorID</name>
      <value><string>operator</string></value>
     </member>
<member><name>originTimeStamp</name>
<value><dateTime.iso8601>20151028T14:16:36+0200</dateTime.iso8601></value>
</member>
     <member>
      <name>originTransactionID</name>
      <value><string>123456789123456</string></value>
     </member>
     <member>
      <name>subscriberNumber</name>
      <value><string>765101293</string></value>
     </member>
    </struct>
   </value>
  </param>
 </params>
</methodCall>


Last edited by cozzin; 02-15-2016 at 04:11 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Replace string of a file with a string of another file for matches using grep,sed,awk

I have a file comp.pkglist which mention package version and release . In 'version change' and 'release change' line there are two versions 'old' and 'new' Version Change: --> Release Change: --> cat comp.pkglist Package list: nss-util-devel-3.28.4-1.el6_9.x86_64 Version Change: 3.28.4 -->... (1 Reply)
Discussion started by: Paras Pandey
1 Replies

2. Shell Programming and Scripting

Replace a string in a xml file

Hello, I have below xml file, I want to find line default-value and replace the string within quotes followed by default-value "moni/Websphere/". Replace moni/Websphere/ with monitor/AMQ/ <monitor> <name>WebsphereMqMonitor</name> <type>managed</type> <argument... (4 Replies)
Discussion started by: prince1987
4 Replies

3. Shell Programming and Scripting

sed or awk command to replace a string pattern with another string based on position of this string

here is what i want to achieve... consider a file contains below contents. the file size is large about 60mb cat dump.sql INSERT INTO `table1` (`id`, `action`, `date`, `descrip`, `lastModified`) VALUES (1,'Change','2011-05-05 00:00:00','Account Updated','2012-02-10... (10 Replies)
Discussion started by: vivek d r
10 Replies

4. Shell Programming and Scripting

sed or awk to replace a value in a certain line from another file containing a string

Hi experts, In my text file I have the following alot of lines like below. input.k is as follows. 2684717 -194.7050476 64.2345581 150.6500092 0 0 2684718 -213.1575623 62.7032242 150.6500092 0 0 *INCLUDE $# filename... (3 Replies)
Discussion started by: hamnsan
3 Replies

5. Shell Programming and Scripting

sed or awk to replace a value in a certain line containing a string

hi experts , I have an input like following. R sfst 1000.0000 $ new time step for mass scaled calculation R dt2ms -4.000E-7 $ friction value for blank R mue ... (10 Replies)
Discussion started by: hamnsan
10 Replies

6. Shell Programming and Scripting

replace (sed?) a string in file with multiple lines (string) from variable

Can someone tell me how I can do this? e.g: a=$(echo -e wert trewt ertert ertert ertert erttert erterte rterter tertertert ert) How do i replace the STRING with $a? I try this: sed -i 's/STRING/'"$a"'/g' filename.ext but this don' t work (2 Replies)
Discussion started by: jforce
2 Replies

7. Shell Programming and Scripting

replace (sed?) a single line/string in file with multiple lines (string) from another file??

Can someone tell me how I can do this? e.g: Say file1.txt contains: today is monday the 22 of NOVEMBER 2010 and file2.txt contains: the 11th month of How do i replace the word NOVEMBER with (5 Replies)
Discussion started by: tuathan
5 Replies

8. Shell Programming and Scripting

How to find a certain string in a file and replace it with a value from another file using sed/awk?

Hi Everyone, I am new to this forum and new to sed/awk programming too !! I need to find particular string in file1(text file) and replace it with a value from another text file(file2) the file2 has only one line and the value to be replaced with is in the second column. file 1: (assert (=... (21 Replies)
Discussion started by: paramad
21 Replies

9. Shell Programming and Scripting

Using sed to replace a string in file with a string in a variable that contains spaces

Hi, i call my shell like: my_shell "my project name" my script: #!/bin/bash -vx projectname=$1 sed s/'PROJECT_NAME ='/'PROJECT_NAME = '$projectname/ <test_config_doxy >temp cp temp test_config_doxy the following error occurres: sed s/'PROJECT_NAME ... (2 Replies)
Discussion started by: vivelafete
2 Replies

10. Shell Programming and Scripting

replace string in XML with sed

Greetings, I have an XML : file.xml <component> <name>abcd</name> <value>1234</value> </component> I am using sed to replace abcd with the desired value dynamically without knowing the actual value. sed 's/<name>./]\{1,\}<\/name>/<name>ijkl<\/name>/' file.xml > newfile.xml I... (6 Replies)
Discussion started by: chiru_h
6 Replies
Login or Register to Ask a Question