Sponsored Content
Full Discussion: Regular expression
Top Forums Shell Programming and Scripting Regular expression Post 302903856 by durden_tyler on Friday 30th of May 2014 05:48:43 AM
Old 05-30-2014
Quote:
Originally Posted by cstsang
I need to extract whatever that comes after "(PROGRAM=" and before ")".In fact, this is Oracle listener log, there are some many "(XXX=YYY)", you are appreciated if you can build a function, it can return YYY when I input XXX.
Here's something to get you started:

Code:
$
$ cat listener.log
Line 1 - blah
Line 2 - blah, blah
20-FEB-2002 14:46:54 * (CONNECT_DATA=(SERVICE_NAME=OZZIEDB001.OZZIEWORKS.COM)(CID=(PROGRAM=C:\WINNT\System32\dllhost.exe)(HOST=OZZIELIVE02)(USER=Administrator))) * (ADDRESS=(PROTOCOL=tcp)(HOST=XX.YYY.16.73)(PORT=21 32)) * establish * OZZIEDB001.OZZIEWORKS.COM * 0
Line 4 - some more stuff
Line 5 - final line here...
$
$
$ cat -n grep_listener.py
     1  #!/usr/bin/python
     2  import sys
     3  import re
     4
     5  # ===============================================
     6  # Subroutine section
     7  # ===============================================
     8  def find_value (ptrn, str):                       # function takes in the regex pattern and the string
     9      val = ""                                      # set the default return value
    10      if re.search(ptrn, str) != None:              # if pattern was found in the string
    11          val = re.sub(ptrn, r'\1', str)            # then substitute it by the placeholder and set that as return value
    12      return val                                    # return the value
    13
    14  # ===============================================
    15  # Main section
    16  # ===============================================
    17  file_name = sys.argv[1]                           # 1st argument = file name
    18  search_for = sys.argv[2]                          # 2nd argument = word to search for
    19  pattern = "^.*?\(" + search_for + "=(.*?)\).*$"   # set up the regex pattern
    20  f = open (file_name, 'r')                         # open the file
    21  for line in f:                                    # iterate through each line
    22      value = find_value(pattern, line)             # call function to return param value for this line
    23      if value != "":                               # if value was found
    24          print value,                              # then print it
    25
$
$ python grep_listener.py listener.log SERVICE_NAME
OZZIEDB001.OZZIEWORKS.COM
$
$ python grep_listener.py listener.log PROGRAM
C:\WINNT\System32\dllhost.exe
$
$ python grep_listener.py listener.log BLAH
$
$

 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Regular Expression + Aritmetical Expression

Is it possible to combine a regular expression with a aritmetical expression? For example, taking a 8-numbers caracter sequece and casting each output of a grep, comparing to a constant. THX! (2 Replies)
Discussion started by: Z0mby
2 Replies

2. Programming

What does the regular expression ['(^[^~]+~).*'] mean?

What does the regular expression +~).*'] mean while using it with regexec.When the string "RCHNUSNT35C~rs07/ASM-RS07" is used with the regular expression +~).*'] regexec gives an error. I know what regexec does,but i do not understand what this expression means wrt to this string... any help... (2 Replies)
Discussion started by: anupamar
2 Replies

3. Linux

Regular expression to extract "y" from "abc/x.y.z" .... i need regular expression

Regular expression to extract "y" from "abc/x.y.z" (2 Replies)
Discussion started by: rag84dec
2 Replies

4. UNIX for Dummies Questions & Answers

ls with regular expression

I currently list and sort all the files in a directory which begin with an Upper Case C and end with the extension '#finished#'. Here is the command I use: ls -tr $currentDir/*.#finished# what i need to do now is list all the files in a directory that begin with upper case C and end... (3 Replies)
Discussion started by: rkgudde
3 Replies

5. Shell Programming and Scripting

Integer expression expected: with regular expression

CA_RELEASE has a value of 6. I need to check if that this is a numeric value. if not error. source $CA_VERSION_DATA if * ] then echo "CA_RELESE $CA_RELEASE is invalid" exit -1 fi + source /etc/ncgl/ca_version_data ++ CA_PRODUCT_ID=samxts ++ CA_RELEASE=6 ++ CA_WEEK_NO=7 ++... (3 Replies)
Discussion started by: ketkee1985
3 Replies

6. Programming

Perl: How to read from a file, do regular expression and then replace the found regular expression

Hi all, How am I read a file, find the match regular expression and overwrite to the same files. open DESTINATION_FILE, "<tmptravl.dat" or die "tmptravl.dat"; open NEW_DESTINATION_FILE, ">new_tmptravl.dat" or die "new_tmptravl.dat"; while (<DESTINATION_FILE>) { # print... (1 Reply)
Discussion started by: jessy83
1 Replies

7. UNIX for Dummies Questions & Answers

regular expression help

\..\ {3\}$ which one of these does this match rs.ef$tt abc.ab abc.$$$$ abc I think its the 1st one what do you think? Thanks Please use code tags! (2 Replies)
Discussion started by: drew211
2 Replies

8. UNIX for Advanced & Expert Users

sed: -e expression #1, char 0: no previous regular expression

Hello All, I'm trying to extract the lines between two consecutive elements of an array from a file. My array looks like: problem_arr=(PRS111 PRS213 PRS234) j=0 while } ] do k=`expr $j + 1` sed -n "/${problem_arr}/,/${problem_arr}/p" problemid.txt ---some operation goes... (11 Replies)
Discussion started by: InduInduIndu
11 Replies

9. UNIX for Dummies Questions & Answers

Regular expression help

Hi, I am quite knew to scripting and I am trying to get a regular expression to work to check that a user enters a valid version number such as 1 or 1.1 or 12.3 etc. I dont seem to be able to get it to work as it picks up versions such as 1.......2. I only want it to work with a single dot.... (12 Replies)
Discussion started by: frodo61
12 Replies

10. Shell Programming and Scripting

Regular expression

Can someone please explain me what does this mean? ^{1,50}$ (1 Reply)
Discussion started by: Anupam_Halder
1 Replies
EXIGREP(8)						      System Manager's Manual							EXIGREP(8)

NAME
EXIGREP - Search Exim's main log SYNOPSIS
exigrep [-l] pattern [log file] ... DESCRIPTION
The exigrep utility is a Perl script that searches one or more main log files for entries that match a given pattern. When it finds a match, it extracts all the log entries for the relevant message, not just those that match the pattern. Thus, exigrep can extract complete log entries for a given message, or all mail for a given user, or for a given host, for example. The -l flag means 'literal', that is, treat all characters in the pattern as standing for themselves. Otherwise the pattern must be a Perl regular expression. The pattern match is case-insensitive. If no file names are given on the command line, the standard input is read. If the location of a zcat command is known from the definition of ZCAT_COMMAND in Local/Makefile, exigrep automatically passes any file whose name ends in COMPRESS_SUFFIX through zcat as it searches it. BUGS
This manual page needs a major re-work. If somebody knows better groff than us and has more experience in writing manual pages, any patches would be greatly appreciated. SEE ALSO
exim(8), perlre(1), /usr/share/doc/exim4-base/ AUTHOR
This manual page was stitched together from spec.txt by Andreas Metzler <ametzler at downhill.at.eu.org>, for the Debian GNU/Linux system (but may be used by others). March 26, 2003 EXIGREP(8)
All times are GMT -4. The time now is 07:45 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy