[BASH/SH] Regex/Rematching Problems


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting [BASH/SH] Regex/Rematching Problems
# 1  
Old 04-07-2011
Network [BASH/SH] Regex/Rematching Problems [RESOLVED]

Hi anyone,
since Sunday I try to create a schellscript that reads the last 10 lines of text out of a log and parses the guid's of the entrys in there.
The log looks like this:
Code:
ClienUserinfo: ... \cl_guid\XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\...

i tried to parse it like this:
Code:
for line in $(tail -n 10 $log );
    do
        #is it a line we want to catch??
        if [[ $newline =~ [C][l][i][e][n][t][U][s][e][r][i][n][f][o][:] ]]; then
            #get the guid
            if [[ $newline =~ [c][l][_][g][u][i][d][\\](................................) ]]
            then
                  guid="${BASH_REMATCH[1]}"
                echo found guid
                echo $guid
            else 
                echo error, no guid
            fi
    done

This works only if the given guid in the logifle starts with a Letter, if the first Character is a number, it gets some wrong crap out.

I am looking forward to find help,
S0lll0s

PS: pls dont mess my code up so i dont understand it anymore, thxSmilie

Last edited by s0lll0s; 04-08-2011 at 03:38 PM..
# 2  
Old 04-07-2011
Could you please provide and example of output of
Code:
tail -10 yourlogfile

and let us know what result you need
# 3  
Old 04-07-2011
Code:
$ tail -10 file  | ruby -e 'while s=gets;puts s.gsub(/.*cl_guid\\(.*?)\\.*/,"\\1") if /ClienUserinfo/;end'
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

# 4  
Old 04-07-2011
How is $newline getting set in your script?

---------- Post updated at 11:03 AM ---------- Previous update was at 10:50 AM ----------

This seem to work OK for me:

Note:
Uses read -r to avoid \ processing
No need for all the [ and ] in match
No "t" in ClienUserinfo

Code:
tail -n 10 $log | while read -r
do
    #is it a line we want to catch??
    if [[ "$REPLY" =~ ClienUserinfo: ]]; then
        #get the guid
        if [[ "$REPLY" =~ cl_guid\\(................................) ]]
        then
            guid="${BASH_REMATCH[1]}"
            echo found guid
            echo $guid
        else
            echo error, no guid
        fi
    fi
done

# 5  
Old 04-08-2011
thx all for the replys, will test it in next time!

---------- Post updated at 03:58 PM ---------- Previous update was at 06:57 AM ----------

@ctsgnb:
$newline loooks like this (if i want to use it):
Code:
2:35 ClientUserinfo: 0 \ip\localhost\name\test\racered\2\raceblue\2\rate\8000\ut_timenudge\0\cg_rgb\255 0 0\funred\gasmask,h_head\funblue\gasmask,h_head\cg_predictitems\0\cg_physics\1\gear\GZAARWA\cl_anonymous\0\sex\male\handicap\100\color2\5\color1\4\team_headmodel\*james\team_model\james\headmodel\sarge\model\sarge\snaps\20\teamtask\0\cl_guid\F6F1365D96239BB0C6BB7CE6A74C064B\weapmodes\00000110220000020002

any other lines dont contain ClientUserinfo

@ Chubler_XL
just misspelling, its "ClientUserinfo"
Somehow it doesnt work, it just reads a few lines, and a few it doesnt. also it doesnt read the whole line, it stops after a few lines.
Code:
tail -n 10 $log | while REPLY=read -r
do
    #is it a line we want to catch??
    if [[ "$REPLY" =~ ClienUserinfo: ]]; then
....

but it didnt work.

@Kurumi i dont get how i should read the variable now. I tried adding "print $s" at the end but it returned the whole last 10 lines.

Last edited by s0lll0s; 04-08-2011 at 11:18 AM..
# 6  
Old 04-08-2011
Ooops

Code:
tail -10 yourlogfile | sed '/ClientUserinfo/!d;s/.*cl_guid\\//;s/\\.*//'

Code:
# cat tst
0
1
2
3
2:35 ClientUserinfo: 0 \ip\localhost\name\test\racered\2\raceblue\2\rate\8000\ut_timenudge\0\cg_rgb\255 0 0\funred\gasmask,h_head\funblue\gasmask,h_head\cg_predictitems\0\cg_physics\1\gear\GZAARWA\cl_anonymous\0\sex\male\handicap\100\color2\5\color1\4\team_headmodel\*james\team_model\james\headmodel\sarge\model\sarge\snaps\20\teamtask\0\cl_guid\F6F1365D96239BB0C6BB7CE6A74C064B\weapmodes\00000110220000020002
5
6
7
8
9
10
# tail tst | sed '/ClientUserinfo/!d;s/.*cl_guid\\//;s/\\.*//'
F6F1365D96239BB0C6BB7CE6A74C064B
#


Last edited by ctsgnb; 04-08-2011 at 11:41 AM..
# 7  
Old 04-08-2011
I didn't write this, it was in RegExr as a saved expression. I suck at regex's but maybe it'll help you.
Code:
\{[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}\}

The nice thing about the tool is that it will test your regex for you and has a bunch of saved regex's which is why I like it Smilie

You can find it at, exploded link since I don't have 5 posts yet and can't post links.

gskinner dot com forwardslash RegExr

Last edited by Scott; 04-08-2011 at 03:14 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Regex negative look and bash script

My script have to read logfile, and take some action, if in pattern are strings: 1) exit 0 strings pattern ... "INF - Status"... success 2) exit 1 (! as not) strings pattern ... "INF - Status"... !success Simple example, what works #!/bin/bash tail -f regex.log | while read LOGLINE ... (7 Replies)
Discussion started by: kvaikla
7 Replies

2. Shell Programming and Scripting

Using RegEx with variable within bash if [[ ]]

I stumbled upon a problem, which I simplified to this: There is a list of numbers, stored in variable $LIST, lets use `seq 5 25` for demonstration. There is a number that should be compared against this list. For demonstration I use user input - read VALUE I am trying to compare RegEx... (2 Replies)
Discussion started by: Zorbeg
2 Replies

3. Shell Programming and Scripting

Bash regex evaluation not workin

I'm building a script that may received start and end date as parameters. I whant to make it as flexible as possible so I'm accepting epoch and date in a way that "date --date=" command may accept. In order to know if parameter provided is an epoc or a "date --date=" string I evaluate if the value... (2 Replies)
Discussion started by: lramirev
2 Replies

4. UNIX for Dummies Questions & Answers

Regex for (a|b) in bash

I am trying to find files using the following by using simple bash script: if -2014 ]]; then echo "yes";fi What I need to find are any files with date 08-**-2014 so August 2014 any files. I can use if -2014 ]]; then echo "yes";fi That works fine. How do I get files beginning with 08... (1 Reply)
Discussion started by: newbie2010
1 Replies

5. UNIX for Dummies Questions & Answers

Need help with Regex for bash

Hi, I am trying to match this word: hexagon-bx.mydomain.com with regex. I have tried this: "\.*]*$" So far I have not been successful. I also need to make sure that the regex will match words that just have lowercase letters and numbers in them, such as camera01. How can I create such an... (5 Replies)
Discussion started by: newbie2010
5 Replies

6. Shell Programming and Scripting

Hi im new to bash scripting I want to know what does the regex expression do ??

# check host value regex='^(||1|2|25)(\.(||1|2|25)){3}$' if ')" != "" ]; then if ]; then echo host $host not found exit 4 fi elif ]; then echo $host is an invalid host address exit 5 fi (1 Reply)
Discussion started by: kevin298
1 Replies

7. Shell Programming and Scripting

Bash regex help

I've been using the following regex below in a bash script on RHEL 5.5 using version GNU bash, version 3.2.25(1)-release I've tried using the script on RHEL 6.3 which uses GNU bash, version 4.1.2(1)-release I assume there's been alot of changes to bash since that's quite a jump in revisions.... (12 Replies)
Discussion started by: woodson2
12 Replies

8. Shell Programming and Scripting

[BASH] Allow name with spaces (regex)

Hey all, I have a very simple regular expression that I use when I want to allow only letters with spaces. (I know this regex has a lot of shortcomings, but I'm still trying to learn them) isAlpha='^*$'However, when I bring this over to BASH it doesn't allow me to enter spaces. I use the... (3 Replies)
Discussion started by: whyte_rhyno
3 Replies

9. Shell Programming and Scripting

Bash regex

Hello everybody, I'm clearly not an expert in bash scripting as I've written maybe less than 10 scripts in my life. I'm trying to strip an xml string removing every tag in it. I'm using bash substitution to do so, but apparently I missed something about what is a regex for bash ... As an... (4 Replies)
Discussion started by: kerloi
4 Replies

10. Shell Programming and Scripting

regex test in bash

Hi I want to do a regex test and branch based on the test result, but this doesn't seems to work :confused: if \) ]] then echo success else echo failed fi (1 Reply)
Discussion started by: subin_bala
1 Replies
Login or Register to Ask a Question