GREP for a tag in XML File


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers GREP for a tag in XML File
# 1  
Old 07-29-2013
GREP for a tag in XML File

I have 2 XML Data files with a tag named PARTICIPATION_TYPE and i am trying to grep for that and getting unique values. However one of the xml data file data is not aligned properly like below.

File 1: (works fine when i do grep)
Code:
grep "PARTICIPATION_TYPE" file1.xml | sort -u

Data:
Code:
....
<NAICS_PCT_PRIMARY>1</NAICS_PCT_PRIMARY>
<GROSS_COMMIT>335000</GROSS_COMMIT>
<PARTICIPATION_TYPE>BS</PARTICIPATION_TYPE>
<MASTER_NOTE_NUMBER>2581777</MASTER_NOTE_NUMBER>
<CROSS_COLLATERAL_FLAG>0</CROSS_COLLATERAL_FLAG>
<LOAN_PURPOSE>7</LOAN_PURPOSE>
<REVOLVING_STATUS>0</REVOLVING_STATUS>
<EXPECTED_LOSS_PCT>0.1725105372</EXPECTED_LOSS_PCT>
<RECORD_TYPE>LN</RECORD_TYPE>
<APPRAISAL_DATE_RE>2008-05-12</APPRAISAL_DATE_RE>
<APPRAISED_VALUE_RE>879496</APPRAISED_VALUE_RE>
<COLL_INSPECTION_DATE>2008-05-12</COLL_INSPECTION_DATE>
<COLL_TYPE>2</COLL_TYPE>
<LOAN_ACRES_COLLATERAL>5778</LOAN_ACRES_COLLATERAL>
<LOAN_TO_AV>.3291057719</LOAN_TO_AV>
<LOAN_TO_AV_ORIGINAL>.38089997</LOAN_TO_AV_ORIGINAL>
<LOAN_TO_TOTAL_COLLATERAL_VALUE>.3291057719</LOAN_TO_TOTAL_COLLATERAL_VALUE>
<NRV_TOTAL>0</NRV_TOTAL>
<VALUE_OF_IMPROVEMENTS>0</VALUE_OF_IMPROVEMENTS>
<STATUS_FLAG>1</STATUS_FLAG>
<UMBRELLA_NUMBER>2581777</UMBRELLA_NUMBER>....

Output:
Code:
        <PARTICIPATION_TYPE>BO</PARTICIPATION_TYPE>
        <PARTICIPATION_TYPE>BS</PARTICIPATION_TYPE>
        <PARTICIPATION_TYPE>M</PARTICIPATION_TYPE>
        <PARTICIPATION_TYPE>NP</PARTICIPATION_TYPE>
        <PARTICIPATION_TYPE>SO</PARTICIPATION_TYPE>
        <PARTICIPATION_TYPE>SS</PARTICIPATION_TYPE>

File 2: (Doesn't works fine when i do grep, it returns multiple lines)
Code:
grep "PARTICIPATION_TYPE" file2.xml | sort -u

so i tried this as well but still not working
Code:
grep "PARTICIPATION_TYPE" file2.xml | awk -F"<PARTICIPATION_TYPE>" '{print $1}'

Data:
Code:
<NAICS_PCT_PRIMARY>1</NAICS_PCT_PRIMARY><GROSS_COMMIT>335000</GROSS_COMMIT><PARTICIPATION_TYPE>BS</PARTICIPATION_TYPE><MASTER_NOTE_NUMBER>2581777</MASTER_NOTE_NUMBER><CROSS_COLLATERAL_FLAG>0</CROSS_COLLATERAL_FLAG><LOAN_PURPOSE>7</LOAN_PURPOSE><REVOLVING_STATUS>0</REVOLVING_STATUS><EXPECTED_LOSS_PCT>0.1725105372</EXPECTED_LOSS_PCT><RECORD_TYPE>LN</RECORD_TYPE><APPRAISAL_DATE_RE>2008-05-12</APPRAISAL_DATE_RE><APPRAISED_VALUE_RE>879496</APPRAISED_VALUE_RE><COLL_INSPECTION_DATE>2008-05-12</COLL_INSPECTION_DATE><COLL_TYPE>2</COLL_TYPE><LOAN_ACRES_COLLATERAL>5778</LOAN_ACRES_COLLATERAL><LOAN_TO_AV>.3291057719</LOAN_TO_AV><LOAN_TO_AV_ORIGINAL>.38089997</LOAN_TO_AV_ORIGINAL><LOAN_TO_TOTAL_COLLATERAL_VALUE>.3291057719</LOAN_TO_TOTAL_COLLATERAL_VALUE><NRV_TOTAL>0</NRV_TOTAL><VALUE_OF_IMPROVEMENTS>0</VALUE_OF_IMPROVEMENTS><STATUS_FLAG>1</STATUS_FLAG><UMBRELLA_NUMBER>2581777</UMBRELLA_NUMBER>
<NAICS_PCT_PRIMARY>1</NAICS_PCT_PRIMARY><GROSS_COMMIT>1281000</GROSS_COMMIT><PARTICIPATION_TYPE>BS</PARTICIPATION_TYPE><MASTER_NOTE_NUMBER>2566058</MASTER_NOTE_NUMBER><CROSS_COLLATERAL_FLAG>0</CROSS_COLLATERAL_FLAG><LOAN_PURPOSE>20</LOAN_PURPOSE><REVOLVING_STATUS>0</REVOLVING_STATUS><EXPECTED_LOSS_PCT>0.0778920588</EXPECTED_LOSS_PCT><RECORD_TYPE>LN</RECORD_TYPE><COLL_TYPE>5</COLL_TYPE><LOAN_TO_AV>0</LOAN_TO_AV><LOAN_TO_AV_ORIGINAL>.3462162162</LOAN_TO_AV_ORIGINAL><LOAN_TO_TOTAL_COLLATERAL_VALUE>.0825253409</LOAN_TO_TOTAL_COLLATERAL_VALUE><NRV_TOTAL>2658750</NRV_TOTAL><STATUS_FLAG>1</STATUS_FLAG><UMBRELLA_NUMBER>2566058</UMBRELLA_NUMBER>

please help.

Thanks.
# 2  
Old 07-29-2013
Try:
Code:
perl -nle '/<PARTICIPATION_TYPE>.*?<\/PARTICIPATION_TYPE>/ && print $&' file.xml

# 3  
Old 07-29-2013
Quote:
Originally Posted by bartus11
Try:
Code:
perl -nle '/<PARTICIPATION_TYPE>.*?<\/PARTICIPATION_TYPE>/ && print $&' file.xml

Thank you, can you please explain a bit for the usage of below special character in your post.

.*?

print $&

thanks.
# 4  
Old 07-29-2013
.*? is a "non-greedy" match, meaning it will match shortest possible match, for example if we have sample data:
Code:
<PARTICIPATION_TYPE>BS</PARTICIPATION_TYPE><PARTICIPATION_TYPE>BS</PARTICIPATION_TYPE>

<PARTICIPATION_TYPE>.*?<\/PARTICIPATION_TYPE>will match <PARTICIPATION_TYPE>BS</PARTICIPATION_TYPE>while <PARTICIPATION_TYPE>.*<\/PARTICIPATION_TYPE>would match<PARTICIPATION_TYPE>BS</PARTICIPATION_TYPE><PARTICIPATION_TYPE>BS</PARTICIPATION_TYPE>
$& contains the last match.
This User Gave Thanks to bartus11 For This Post:
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Grepping multiple XML tag results from XML file.

I want to write a one line script that outputs the result of multiple xml tags from a XML file. For example I have a XML file which has below XML tags in the file: <EMAIL>***</EMAIL> <CUSTOMER_ID>****</CUSTOMER_ID> <BRANDID>***</BRANDID> Now I want to grep the values of all these specified... (1 Reply)
Discussion started by: shubh752
1 Replies

2. Shell Programming and Scripting

Moving XML tag/contents after specific XML tag within same file

Hi Forum. I have an XML file with the following requirement to move the <AdditionalAccountHolders> tag and its content right after the <accountHolderName> tag within the same file but I'm not sure how to accomplish this through a Unix script. Any feedback will be greatly appreciated. ... (19 Replies)
Discussion started by: pchang
19 Replies

3. Shell Programming and Scripting

Update particular tag in a XML file

Below is the content in my XML file <name>XXX</name> <eventType>Uptime</eventType> <eventType>Delay</eventType> <eventType>Delay</eventType> <name>YYY</name> <eventType>Uptime</eventType> <eventType>Delay</eventType> ... (12 Replies)
Discussion started by: Viswanatheee55
12 Replies

4. Shell Programming and Scripting

Extracting the tag name from an xml file

Hi, My requirement is something like this, I have a xml file that contains some tags and nested tags, <n:tag_name1> <n:sub_tag1>val1</n:sub_tag1> <n:sub_tag2>val2</n:sub_tag2> </n:tag_name1> <n:tag_name2> <n:sub_tag1>value</n:sub_tag1> ... (6 Replies)
Discussion started by: Little
6 Replies

5. Shell Programming and Scripting

To search for a particular tag in xml and collate all similar tag values and display them count

I want to basically do the below thing. Suppose there is a tag called object1. I want to display an output for all similar tag values under heading of Object 1 and the count of the xmls. Please help File: <xml><object1>house</object1><object2>child</object2>... (9 Replies)
Discussion started by: srkmish
9 Replies

6. Shell Programming and Scripting

Extract XML tag value from file

Hello, Hope you are doing fine. I have an log file which looks like as follows: Some junk text1 Date: Thu Mar 15 13:38:46 CDT 2012 DATA SENT SUCCESSFULL: Some jun text 2 Date: Thu Mar 15 13:38:46 CDT 2012 DATA SENT SUCCESSFULL: ... (3 Replies)
Discussion started by: srattani
3 Replies

7. Shell Programming and Scripting

How to add the multiple lines of xml tags before a particular xml tag in a file

Hi All, I'm stuck with adding multiple lines(irrespective of line number) to a file before a particular xml tag. Please help me. <A>testing_Location</A> <value>LA</value> <zone>US</zone> <B>Region</B> <value>Russia</value> <zone>Washington</zone> <C>Country</C>... (0 Replies)
Discussion started by: mjavalkar
0 Replies

8. Shell Programming and Scripting

How to retrieve the value from XML tag whose end tag is in next line

Hi All, Find the following code: <Universal>D38x82j1JJ </Universal> I want to retrieve the value of <Universal> tag as below: Please help me. (3 Replies)
Discussion started by: mjavalkar
3 Replies

9. Shell Programming and Scripting

Changing particular tag value of xml file

Hi All, I have number of xml file like : ______________________________________________________ <?xml version="1.0" standalone="no"?> <!-- Created by Symology Ltd on 13/02/2012 - USER_BATCH_ID 0011091684 --> <!-- RECIPIENT_URL: HTTP://194.168.0.81:3408 --> <EToNrequest ... (7 Replies)
Discussion started by: krsnadasa
7 Replies

10. Shell Programming and Scripting

XML tag replacement from different XML file

We have 2 XML file 1. ORIGINAL.xml file and 2. ATTRIBUTE.xml files, In the ORIGINAL.xml we need some modification as <resourceCode>431048</resourceCode>under <item type="Manufactured"> tag - we need to grab the 431048 value from tag and pass it to database table in unix shell script to find the... (0 Replies)
Discussion started by: balrajg
0 Replies
Login or Register to Ask a Question