Bash regex help


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Bash regex help
# 1  
Old 10-10-2012
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. I'm wondering if anyone can help me sort what might have to be modified in the code to make this work again.

If I enter an e-mail address in a simple format like:

user.user@test.com the scripts sees this as an invalid e-mail now, whereas before this would pass the regex.


Code:
#!/bin/bash
echo Enter the users e-mail address.

read ADDRESS

if [[ "$ADDRESS" =~ "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$" ]] ; then
   echo $?
   echo Proceeding!!
else
   echo $?
   echo You entered an invalid e-mail address!!!
exit 1
fi

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

Last edited by Scrutinizer; 10-10-2012 at 04:01 PM.. Reason: Removed extra code tags...
# 2  
Old 10-10-2012
There should not be double quotes around the regex...
This User Gave Thanks to Scrutinizer For This Post:
# 3  
Old 10-10-2012
Quote:
Originally Posted by Scrutinizer
There should not be double quotes around the regex...

So simple..Thanks
# 4  
Old 10-10-2012
You also shouldn't depend on the meaning of $?, after the test (if [ ...]).

Code:
$ cat SomeScript
ls sdadadsasdasd
echo $?

ls sdadadsasdasd

if [ 1 -eq 1 ]; then
  echo $?
  echo Yes, 1 is 1
else
  echo $?
  echo No, not 1 is not 1
fi


$ ./SomeScript
ls: sdadadsasdasd: No such file or directory
1
ls: sdadadsasdasd: No such file or directory
0
Yes, 1 is 1

# 5  
Old 10-10-2012
Quote:
Originally Posted by Scott
You also shouldn't depend on the meaning of $?, after the test (if [ ...]).

Code:
$ cat SomeScript
ls sdadadsasdasd
echo $?

ls sdadadsasdasd

if [ 1 -eq 1 ]; then
  echo $?
  echo Yes, 1 is 1
else
  echo $?
  echo No, not 1 is not 1
fi


$ ./SomeScript
ls: sdadadsasdasd: No such file or directory
1
ls: sdadadsasdasd: No such file or directory
0
Yes, 1 is 1

Thanks, however I wasn't relying on the exit status, I just put that in the script temporarily while trying to test.
# 6  
Old 10-10-2012
I know, but just thought it worth mentioning Smilie
# 7  
Old 10-10-2012
I'm having the same issue in this regex. if I remove the quotes in this one then
something like Test Name comes back as invalid whereas in bash 3.2 Test Name would be valid but test name would be invalid. The idea is the first and last name need to start with an upper case letter of course.

Code:
if [[ "$givenName" =~ "^[A-Z]([a-z]|'[A-Za-z])+\s+[A-Z]([a-z]|'[A-Za-z])+(-[A-Z]([a-z]|'[A-Za-z])+)*$" ]]
  then
    echo -e "${bldgrn}$givenName is a valid name.${txtrst}"
else
    echo -e "${bldred}$givenName is an invalid name!!${txtrst}"
exit 1
fi

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. 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

2. 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

3. 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

4. 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

5. 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

6. 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

7. 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

8. Shell Programming and Scripting

Bash string replacement - how to use regex?

Hello I have a bash script where I need to do a substring replacement like this: variable2=${variable1/foo/bar} However, I only want "foo" replaced if it is at the end of the line. However, this does not work: variable2=${variable1/foo$/bar} as you can see I'm using the $ regex for... (2 Replies)
Discussion started by: Ubuntu-UK
2 Replies

9. Shell Programming and Scripting

bash regex =~ case insensetive, possible?

It can get very annoying that bash regex =~ is case-sensetive, is there a way to set it to be case-insensetive? if ]; then echo match else echo no match fi (8 Replies)
Discussion started by: TehOne
8 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