grep - Extracting multiple key words from stdout


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting grep - Extracting multiple key words from stdout
# 1  
Old 05-07-2012
grep - Extracting multiple key words from stdout

Hello.

From command line, the command zypper info nxclient
return a bloc of data :

Code:
linux local # zypper info nxclient
Loading repository data...
Reading installed packages...


Information for package nxclient:

Repository: zypper_local
Name: nxclient
Version: 3.5.0-7
Arch: x86_64
Vendor: NoMachine
Installed: No
Status: not installed
Installed Size: 10.3 MiB
Summary: NX Client
Description: 
NoMachine NX is a fast and scalable terminal server system based on the
X11 protocol. NX lets you work fluently even across slow links like modems
and provides a full set of administration tools that make it a complete
desktop virtualization solution for your organization.

This package contains the graphical front-end used to access X, RDP and RFB
sessions on a remote NX Server. It also includes NX X compression libraries
and utilities needed by both NX Client and Server.

Baseline:

nx-X11: 3.5.0-1
nxauth: 3.5.0-1
nxwin:  3.5.0-2
nxssh:  3.5.0-2
nxcomp: 3.5.0-2
nxesd:  3.5.0-2
nxkill: 3.5.0-1
nxservice: 3.5.0-2
nxcompsh: 3.5.0-1
nx-X11-compat: 3.5.0-1
linux-srv:/local/install_from_local #

How to code a function which return true if the bloc of data contains some specific values.

something like :

Code:
#!/bin/bash
#

function my_filter() {

if Repository = zypper_local then
if Installed = No then
if Status = not installed then
my_filter = "TRUE"
fi
fi
fi } #MAIN zypper info nxclient > file_temp.text if my_filter(file_temp.txt) = true then
install it
fi # end

I look for a better solution that reading "file_temp.text" 3 times and looking for each parameter :
Code:
result=${ command | grep para1 para2 para3 )
if $result=true then
     install
fi

Moderator's Comments:
Mod Comment Please view this link: How to use [code]...[/code] tags

Last edited by Scrutinizer; 05-08-2012 at 12:59 AM.. Reason: code tags
# 2  
Old 05-07-2012
Code:
cnt=$(zypper info nxclient | grep -c -e 'Repository zypper_local'  -e 'Installed: no' -e 'Status = not installed')
if [ $cnt -eq 3 ] ; then
  # do something
fi

This User Gave Thanks to jim mcnamara For This Post:
# 3  
Old 05-13-2012
MySQL

Great

Thank you very much.

Smilie
# 4  
Old 05-15-2012
I get headache with quote.

Here's exposure problem :

In the following :
Note 1 :
file_to_grep_in is the result of the zypper command issue in the current running bash script
like :
Code:
zypper  zypper_option package_to_install > file_to_grep_in

To use the grep function in a BASH program, I modify the command as follows:

Code:
cnt=$( grep -c -e grep_param_1 -e grep_param_2   -e ..... -e ........   file_to_grep_in )

and to follow the script I print result on the console I used to use

Code:
CMD="all command and parameters stuff"
 echo "command : $CMD"
 $CMD

Which gives
Code:
CMD="cnt=$( grep -c -e grep_param_1  -e grep_param_2    -e grep_param_3   file_to_grep_in )"
echo "command : $CMD"
$CMD



Note 2 :

Each of the parameters used by grep consist of two or three parts. Each party being represented by a variable:
Which gives
Code:
CMD="cnt=$( grep -c -e $grep_param_1_part1 $grep_param_1_part2   -e $grep_param_2_part1 $grep_param_2_part2   -e $grep_param_3_part1 $grep_param_3_part2   $grep_param_3_part3   $file_to_grep_in )"
echo "command : $CMD"
$CMD

How to obtain this
I show the printout I want to get for the script command : echo "command : $CMD" and the variab le CMD contain : CNT=$(.................)

Code:
CNT=$(grep -c -e "Non-option program arguments: 'nxclient' "  -e "Selecting  'nxclient-" -e  "from repository 'nxclient' for installation"  /tmp/nxclient_install.log )


Remark 1 first parameter :
see at the end nxclient between single quote --> 'nxclient'
Remark 2 second parameter : see at the end nxclient with single quote and dash --> 'nxclient-
Remark 1 third parameter : see in the middle nxclient between single quote --> 'nxclient'

$grep_param_1_part1 = Non-option program arguments: '
$grep_param_1_part2 = nxclient'
$grep_param_2_part1 = Selecting '
$grep_param_2_part2
= nxclient-
$grep_param_3_part1 = from repository '
$
grep_param_3_part2
= nxclient
$
grep_param_3_part3
= ' for installation
$file_to_grep_in = /tmp/nxclient_install.log


By the way is it possible to add parameter 4 with this constraint :

Look for

Code:
param_4_part_1 = >The following NEW package is going to be installed:<
at the very beginning at the next line 
param_4_part_2 = >nxclient<


Last edited by Scrutinizer; 05-15-2012 at 03:59 PM.. Reason: adding one more parameter to get - mod: code tags
# 5  
Old 05-15-2012
Hi.
Quote:
Originally Posted by jcdole
I get headache with quote.
Command agrep allows simple forms for AND ( ; ), as well as OR (, ), as shown here:
Code:
#!/usr/bin/env bash

# @(#) s1	Demonstrate searching for either-or patterns, agrep.

pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
db() { ( printf " db, ";for _i;do printf "%s" "$_i";done;printf "\n" ) >&2 ; }
db() { : ; }
C=$HOME/bin/context && [ -f $C ] && $C agrep

FILE=${1-data1}
# Omit if specimen not found:
pl " Sample of input file $FILE:"
specimen $FILE

pl " Results with agrep:"
agrep 'Repository: zypper_local,Installed: No,Status: not installed' $FILE

exit 0

producing:
Code:
% ./s1

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 2.6.26-2-amd64, x86_64
Distribution        : Debian GNU/Linux 5.0.8 (lenny) 
bash GNU bash 3.2.39
agrep - ( /usr/bin/agrep, 2007-02-07 )

-----
 Sample of input file data1:
Edges: 5:0:5 of 38 lines in file "data1"
Loading repository data...
Reading installed packages...


Information for package nxclient:
   ---
nxkill: 3.5.0-1
nxservice: 3.5.0-2
nxcompsh: 3.5.0-1
nx-X11-compat: 3.5.0-1


-----
 Results with agrep:
Repository: zypper_local
Installed: No
Status: not installed

And agrep is found in repository:
Code:
% zypper info agrep
Loading repository data...
Reading installed packages...


Information for package agrep:

Repository: openSUSE-11.4-Oss
Name: agrep
Version: 0.8.0-6.1
Arch: x86_64
Vendor: openSUSE
...

Best wishes ... cheers, drl
This User Gave Thanks to drl For This Post:
# 6  
Old 05-15-2012
Quote:
Originally Posted by drl
Hi.
Best wishes ... cheers, drl
My problem is not to find some substring within a file; as jim mcnamara give me a solution.
My (new)problem is to find substring which contain single quote within the file. And to print to the screen what is to be being done.

Making some try, I can print the variable CMD which show on screen the good code to be executed:

Code:
.......
.......
.......
echo "COMMAND : $CMD"

Show :
Code:
COMMAND : CNT=$(  grep -c -e  "Non-option program arguments: 'nxclient'" -e   "Checking whether to refresh metadata for zypper_local"  -e  "Selecting 'nxclient-3.5.0-7.x86_64' from repository 'zypper_local' for installation."  /tmp/nxclient_install_log.txt )

Which is correct; and should give CNT=3 which is correct.
But when I try to execute $CMD I get this error :
Code:
/root/bin/freenx_install_server_function: line 102: CNT=$(: command not found

How to execute $CMD with success.

Last edited by Scrutinizer; 05-15-2012 at 03:19 PM.. Reason: code tags and formatting
# 7  
Old 05-15-2012
Hi.

Much of the text was from the initial problem, but this is a separate issue.

Thank you for clarifying it for me. I suggest you begin a new thread for a new problem ... cheers, drl
This User Gave Thanks to drl 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

Grep multiple words in a file with help of fixed string switch

I have multiple strings in a file which have special character $, when i search strings by ignoring $ with \ using single quotes it returns empty results. My search strings are set char_1($lock) and set new_char_clear_3($unlock) I tried searching with but it returns empty results.However... (3 Replies)
Discussion started by: g_eashwar
3 Replies

2. Shell Programming and Scripting

Confused with grep for multiple words

Hi guys and gals, I have many files that contains many lines of data. I am trying to find a needle in a haystack in that I'm looking only for files that contain word1 AND word2. I'm using ... ... but this is finding files that contains word1 OR word2. No good for me. How can I grep to... (7 Replies)
Discussion started by: bbbngowc
7 Replies

3. Shell Programming and Scripting

Grep multiple words with not null value

Hi, I want to grep a file if any one (GH, IJ, KL) is not null. If it is null i dont want to pull anything. cat file | awk '{print ($1)}' Parameters are : AB=123;CD=456;EF=6789; cat file | awk '{print ($2)}' GH=456;IJ=789;KL=1011 eg: Contents in file: Parameters are :... (10 Replies)
Discussion started by: Neethu
10 Replies

4. Shell Programming and Scripting

Grep multiple words in a single file

Hello All, I'm a newbie/rookie in Shell scipting. I've done oracle export of a table using Export utility. When I do export, it generates 2 files. 1> .dmp file 2> .dmp.log file. In .dmp.log file I have to search for a sentence which goes like '0 records have been inserted' and then... (2 Replies)
Discussion started by: samfisher
2 Replies

5. Shell Programming and Scripting

Extracting Max date for multiple same key

Can any one help me to sort and extract the max date row from multiple same key ? example of input file kEY DATE(YYY-MM-DD) 10 2011-08-01 20 2011-09-02 20 2011-10-01 20 2011-08-02 30 2010-01-20 30 2011-01-20 Out put : 10 2011-08-01co 20 2011-10-01 30 2011-01-20 ... (5 Replies)
Discussion started by: jambesh
5 Replies

6. Shell Programming and Scripting

words extracting

Hi, Pls assist. dn: uid=test,ou=test,dc=com description: password sunIdentityServerDeviceStatus: Active uid: test objectClass: sunIdentityServerDevice objectClass: iplanet-am-user-service objectClass: top objectClass: iPlanetPreferences sunIdentityServerDeviceType: blabla cn: default... (3 Replies)
Discussion started by: hudson03051nh
3 Replies

7. Shell Programming and Scripting

grep multiple words in a single line

Hi.. How to search for multiple words in a single line using grep?. Eg: Jack and Jill went up the hill Jack and Jill were best friends Humpty and Dumpty were good friends too ---------- I want to extract the 2nd statement(assuming there are several statements with... (11 Replies)
Discussion started by: anduzzi
11 Replies

8. UNIX for Dummies Questions & Answers

search multiple words using grep

Hi frnds i want to desplay file names that should be word1 and word2 ex : i have 10 *.log files 5 files having word1 and word2 5 files having only word1, i have used below command egrep -l 'word1|word2' *.log its giving all 10 files, but i want to display only 5... (20 Replies)
Discussion started by: pb18798
20 Replies

9. Shell Programming and Scripting

grep on multiple words to match text template

hi, I have few text templates as a simple ex: template 1 city Name: zip code: state Name: template2: employee Name: Phone number: I wish to grep on given text file and make sure the text file matches one of these templates. Please give your ideas. (6 Replies)
Discussion started by: rider29
6 Replies

10. Shell Programming and Scripting

extracting some words

i run a command that submits a word to WordNET which stores the search results in a document which looks like this... i searched "car" in this instance and id like to extract auto, automobile, machine, and store it in a file with the , , stripped away just the words. WordNET's results' template... (2 Replies)
Discussion started by: mark_nsx
2 Replies
Login or Register to Ask a Question