Parsing XML using command line


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Parsing XML using command line
# 1  
Old 07-17-2015
Parsing XML using command line

Hi Experts,

How do I parse a XML with below contents

Code:
      <saw:user name="mbussey@xyz.com" />
      <saw:user name="kimmy.chan@pqr.com" />
      <saw:user name="chudgins@gmail.com" />

and retrieve below output ?

Code:
	  [email]mbussey@xyz.com[/email]
	  [email]kimmy.chan@pqr.com[/email]
	  [email]chudgins@gmail.com[/email]

Also I have 5 .xml file with different set of parsing name value. Anyway we can parse and merge them in command line and output in one file ?

thanks and appreciate your help ?
- paul

Last edited by Don Cragun; 07-17-2015 at 07:44 PM.. Reason: Add CODE tags.
# 2  
Old 07-17-2015
Difficult to do true parsing without some sort of tool (that's not part of Linux/Unix normally).

For very specific cases it might work to glean out what you want though (all depends on the input).

So...if we assume it's like what you mentioned and the data is all on one line, etc.. then you could filter the data with:

Code:
sed -n 's/.*saw:user name="\([^"]*\).*/\1/p'

But it assumes pretty formatted XML.
# 3  
Old 07-17-2015
thanks for prompt response. I am sorry but how do I pass input file name ?
# 4  
Old 07-17-2015
just redirect

Code:
sed -n 's/.*saw:user name="\([^"]*\).*/\1/p' <myfile.xml

As for multiple things, again with assumption about the xml file as before....

Code:
sed -n -e 's/.*saw:user name="\([^"]*\).*/\1/p' -e 's/.*something:else name="\([^"]*\).*/\1/p' <myfile.xml

Just keep adding -e with the substitution and capture/replace patterns you need.
# 5  
Old 07-17-2015
Sorry but not helping too much . Might be XML is badly formatted . This is entire XML.

Code:
<?xml version="1.0" encoding="UTF-8"?>
<saw:ibot xmlns:saw="com.siebel.analytics.web/report/v1" version="1" priority="normal" jobID="36">
  <saw:schedule timeZoneId="(GMT-05:00) Eastern Time (US &amp; Canada)" disabled="false">
    <saw:start repeatMinuteInterval="60" endTime="23:59:00" startImmediately="true" />
    <saw:recurrence runOnce="false">
      <saw:weekly weekInterval="1" mon="true" tue="true" wed="true" thu="true" fri="true" />
    </saw:recurrence>
  </saw:schedule>
  <saw:dataVisibility type="recipient" runAs="cgm" />
  <saw:choose>
    <saw:when condition="true">
      <saw:deliveryContent>
        <saw:headline>
          <saw:caption>
            <saw:text>Availability Parity</saw:text>
          </saw:caption>
        </saw:headline>
        <saw:conditionalReport />
      </saw:deliveryContent>
      <saw:postActions />
    </saw:when>
    <saw:otherwise />
  </saw:choose>
  <saw:deliveryDestinations>
    <saw:destination category="dashboard" />
    <saw:destination category="activeDeliveryProfile" />
  </saw:deliveryDestinations>
  <saw:recipients subscribers="true" customize="false" specificRecipients="false">
    <saw:subscribers>
    <saw:user name="mbussey@xyz.com" />
    <saw:user name="kimmy.chan@pqr.com" />
    <saw:user name="chudgins@gmail.com" />
</saw:recipients>
  <saw:conditionQuery>
    <saw:reportRefNode path="/shared/Quote/Product/Alerts/Daily Availability Parity Alert - Next 14 Days - Content" />
  </saw:conditionQuery>
</saw:ibot>

Moderator's Comments:
Mod Comment Please use CODE tags when displaying code, input, and output samples.

Last edited by Don Cragun; 07-17-2015 at 11:14 PM.. Reason: Add CODE tags again.
# 6  
Old 07-17-2015
Should work.

I put your xml into a file and this what I got:

Code:
sed -n 's/.*saw:user name="\([^"]*\).*/\1/p' <myfile.xml
mbussey@xyz.com
kimmy.chan@pqr.com
chudgins@gmail.com

(I'm just using the simple case of one pattern)

And modified to add the email code tags:

Code:
sed -n 's/.*saw:user name="\([^"]*\).*/[email]\1\[\/email]/p' <myfile.xml
[email]mbussey@xyz.com[/email]
[email]kimmy.chan@pqr.com[/email]
[email]chudgins@gmail.com[/email]

Note: on the unix forums the "bbcode" like tags are interpreted... so you won't see the email tags come out here.

Moderator's Comments:
Mod Comment You can use the NP button to create tags (or [NOPARSE]...[/NOPARSE] tags) to stop interpretation of other tags between them.

Last edited by Don Cragun; 07-17-2015 at 08:19 PM.. Reason: Make the email tags visible.
This User Gave Thanks to cjcox For This Post:
# 7  
Old 07-17-2015
Code:
perl -nle '/saw:user name="(.*?)"/ and print qq{[email]$1\[/email]}' myfile.xml

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Command Line Perl for parsing fasta file

I would like to take a fasta file formated like >0001 agttcgaggtcagaatt >0002 agttcgag >0003 ggtaacctga and use command line perl to move the all sample gt 8 in length to a new file. the result would be >0001 agttcgaggtcagaatt >0003 ggtaacctga cat ${sample}.fasta | perl -lane... (2 Replies)
Discussion started by: jdilts
2 Replies

2. Shell Programming and Scripting

Suggestions for command line parsing

Hi all I need to put a command line parser together to parse numeric fields and ranges passed to a script. I'm looking for a bash function that is as elegant and simple as possible. So the input would be of the following form - 1,2,8-12 This would return - 1,2,8,9,10,11,12 Input can... (7 Replies)
Discussion started by: steadyonabix
7 Replies

3. Shell Programming and Scripting

Multiple command execution inside awk command during xml parsing

below is the output xml string from some other command and i will be parsing it using awk cat /tmp/alerts.xml <Alert id="10102" name="APP-DS-ds_ha-140018-componentFailure-S" alertDefinitionId="13982" resourceId="11427" ctime="1359453507621" fixed="false" reason="If Event/Log Level(ANY) and... (2 Replies)
Discussion started by: vivek d r
2 Replies

4. Shell Programming and Scripting

XML: parsing of the Google contacts XML file

I am trying to parse the XML Google contact file using tools like xmllint and I even dived into the XSL Style Sheets using xsltproc but I get nowhere. I can not supply any sample file as it contains private data but you can download your own contacts using this script: #!/bin/sh # imports... (9 Replies)
Discussion started by: ripat
9 Replies

5. Programming

Parsing command line arguments in Python

Hi, I've a python script called aaa.py and passing an command line option " -a" to the script like, ./aaa.py -a & Inside the script if the -a option is given I do some operation if not something else. code looks like ./aaa.py -a . . if options.a ---some operation--- if not options.a... (1 Reply)
Discussion started by: testin
1 Replies

6. Shell Programming and Scripting

Parsing a command line parameter in script

I have a simple script that builds a complex program call which passes a number of parameters to the program. I'm trying to enhance the script to include the value of the command line parameter in the name of a file being created. The problem I'm having is that the parameter may include a forward... (11 Replies)
Discussion started by: pbmax626
11 Replies

7. Shell Programming and Scripting

Help parsing command line arguments in bash

Looking for a little help parsing some command line arguments in a bash script I am working on, this is probably fairly basic to most, but I do not have much experience with it. At the command line, when the script is run, I need to make sure the argument passed is a file, it exists in the... (3 Replies)
Discussion started by: Breakology
3 Replies

8. Shell Programming and Scripting

parsing command line switches in Perl

Hi, My perl script takes few switches which i'm parsing through GetOpt::Long module. My script looks like something : myscript.pl --file="foo" --or --file="bar" The --file switch takes 2 arguments foo and bar. The 2 values of file are separated by --or switch. I want to ensure that... (1 Reply)
Discussion started by: obelix
1 Replies

9. UNIX for Dummies Questions & Answers

command line argument parsing

how to parse the command line argument to look for '@' sign and the following with '.'. In my shell script one of the argument passed is email address. I want to parse this email address to look for correct format. rmjoe123@hotmail.com has '@' sign and followed by a '.' to be more... (1 Reply)
Discussion started by: rmjoe
1 Replies

10. UNIX for Advanced & Expert Users

Parsing the command line arguments

Is there a way to get the command line arguments. I am using getopt(3) but if the arguments are more than one for a particular option than it just ignores the second argument. For eg ./a.out -x abc def now abd will be got with -x using getopt "( x : )" and string abc\0def will get stored... (7 Replies)
Discussion started by: jayakhanna
7 Replies
Login or Register to Ask a Question