Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 152
  • Last Modified:

with vimgrep - or other vim possibility - how can i get groups of data out of a file ?

Hello every one.

I'm trying to do a vimgrep on a file in order to get only two attributs with their values out of the xml file.
so far i can get the complete lines  and i'd like with the help of groups to have a better display.

:vimgrep key= % | copen

^ I'd like to add to this command the grouping possibility with "\(  \)" ....but without success for the moment.

i'd appreciate your help in order to have a result as explained in the "result  expected"






part of the file that I'm working with :
.....................................................................................................................................................
 <policy name="Menu_Controls" class="User" displayName="$(string.Menu_Controls)" explainText="$(string.IE_ExplainMenu_Controls)" presentation="$(presentation.Menu_Controls)" key="Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\AllowedControls">
      <parentCategory ref="AdminApproved" />
      <supportedOn ref="SUPPORTED_IE5" />
      <elements>
        <boolean id="MCSiMenu" valueName="{275E2FE0-7486-11D0-89D6-00A0C90C9B67}">
          <trueValue>
            <decimal value="0" />
          </trueValue>
          <falseValue>
            <decimal value="1" />
          </falseValue>
        </boolean>
        <boolean id="PopupMenu_Object" valueName="{7823A620-9DD9-11CF-A662-00AA00C066D2}">
          <trueValue>
            <decimal value="0" />
          </trueValue>
          <falseValue>
            <decimal value="1" />
          </falseValue>
        </boolean>
        <boolean id="Ikonic_Control" valueName="{F5131C24-E56D-11CF-B78A-444553540000}">
          <trueValue>
            <decimal value="0" />
          </trueValue>
          <falseValue>
            <decimal value="1" />
          </falseValue>
        </boolean>
      </elements>
    </policy>
    <policy name="Microsoft_Agent" class="User" displayName="$(string.Microsoft_Agent)" explainText="$(string.IE_Explain_Microsoft_Agent)" presentation="$(presentation.Microsoft_Agent)" key="Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\AllowedControls">
      <parentCategory ref="AdminApproved" />
      <supportedOn ref="SUPPORTED_IE5" />
      <elements>
        <boolean id="Microsoft_Agent_Control" valueName="{D45FD31B-5C6E-11D1-9EC1-00C04FD7081F}">
          <trueValue>
            <decimal value="0" />
          </trueValue>
          <falseValue>
            <decimal value="1" />
          </falseValue>
        </boolean>
      </elements>
    </policy>
.....................................................................................................................................................



my expected result :
.....................................................................................................................................................
 name="Menu_Controls"  key="Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\AllowedControls"
 name="Microsoft_Agent" key="Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\AllowedControls"
......
.....................................................................................................................................................
0
Erwin Pombett
Asked:
Erwin Pombett
  • 3
1 Solution
 
savoneCommented:
Here is how I would do it with bash:

#!/bin/bash
while read line
	do name=$(echo $line | grep -oP 'name=[^"]*"\K[^"]*')
	key=$(echo $line | grep -oP 'key=[^"]*"\K[^"]*')
	if [ -z "${name}" ]; then
		continue	
	fi
        echo "name=\"$name\" key=\"$key\""
done < file

Open in new window


Here is the output I received:

# ./do
name="Menu_Controls" key="SoftwarePoliciesMicrosoftWindowsCurrentVersionInternet SettingsAllowedControls"
name="Microsoft_Agent" key="SoftwarePoliciesMicrosoftWindowsCurrentVersionInternet SettingsAllowedControls"
0
 
savoneCommented:
I just noticed it stripped the \ out of the keys.... hmmmm....
0
 
savoneCommented:
Ahh, it seems echo was stripping the backslashes... This works better.

#!/bin/bash
while read -r line
	do name=$(echo $line | grep -oP 'name=[^"]*"\K[^"]*')
	key=$(echo $line | grep -oP 'key=[^"]*"\K[^"]*')
	if [ -z "${name}" ]; then
		continue	
	fi
echo name=\""${name}"\" key=\""${key}"\"
done < file

Open in new window


Output is now:
name="Menu_Controls" key="Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\AllowedControls"
name="Microsoft_Agent" key="Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\AllowedControls"
0
 
Erwin PombettAuthor Commented:
thanks a lot for your help.
wonderful

toshi
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now