bash regex =~ case insensetive, possible?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting bash regex =~ case insensetive, possible?
# 1  
Old 05-21-2009
Question 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?

Code:
if [[ "$1" =~ "(test)" ]]; then
  echo match
else 
  echo no match
fi

# 2  
Old 05-21-2009
Quote:
Originally Posted by TehOne
It can get very annoying that bash regex =~ is case-sensetive, is there a way to set it to be case-insensetive?

A few seconds with the bash man page reveals:

Code:
shopt -s nocasematch

Quote:
Code:
if [[ "$1" =~ "(test)" ]]; then
  echo match
else 
  echo no match
fi


You are not testing against a regex; you are testing against a string. To test a regex, remove the quotes from the right-hand side.
# 3  
Old 05-21-2009
Quote:
Originally Posted by cfajohnson

A few seconds with the bash man page reveals:

Code:
shopt -s nocasematch


You are not testing against a regex; you are testing against a string. To test a regex, remove the quotes from the right-hand side.

It doesn't work, here's how I tested it:

Code:
if [[ "$1" =~ "(test)" ]]; then
  echo match with quotas
else
  echo no match with quotas
fi

if [[ "$1" =~ \(test\) ]]; then
  echo match without quotas
else
  echo no match without quotas
fi

Code:
[21:56:45] root:~# shopt -s nocasematch
[21:59:29] root:~# ./test Test
no match with quotas
no match without quotas

Edit:

Code:
GNU bash, version 3.1.17(1)-release (x86_64-pc-linux-gnu)


Last edited by TehOne; 05-21-2009 at 05:15 PM..
# 4  
Old 05-21-2009
Code:
if [[ "$1" =~ (test) ]]; then
  echo match
else
  echo no match
fi

# 5  
Old 05-21-2009
Quote:
Originally Posted by cfajohnson
Code:
if [[ "$1" =~ (test) ]]; then
  echo match
else
  echo no match
fi

./test: line 10: unexpected argument `(' to conditional binary operator
./test: line 10: syntax error near `(t'
./test: line 10: `if [[ "$1" =~ (test) ]]; then'

I didn't use \( \) for no reason :>

And I have also tested '(test)' and test
# 6  
Old 05-21-2009

It works without the backslashes in bash 3.2 (released almost 3 years ago, in 1996) and later.
# 7  
Old 05-21-2009
Quote:
Originally Posted by cfajohnson

It works without the backslashes in bash 3.2 (released almost 3 years ago, in 1996) and later.
Code:
GNU bash, version 4.0.0(1)-release (x86_64-unknown-linux-gnu)

Code:
if [[ "$1" =~ "(test)" ]]; then
  echo match 1
else
  echo no match 1
fi

if [[ "$1" =~ \(test\) ]]; then
  echo match 2
else
  echo no match 2
fi

if [[ "$1" =~ '(test)' ]]; then
  echo match 3
else
  echo no match 3
fi

if [[ "$1" =~ (test) ]]; then
  echo match 4
else
  echo no match 4
fi

Code:
[23:32:05] root:~# shopt -s nocasematch
[23:32:22] root:~# ./test Test
no match 1
no match 2
no match 3
./test: line 22: unexpected argument `(' to conditional binary operator
./test: line 22: syntax error near `(t'
./test: line 22: `if [[ "$1" =~ (test) ]]; then'

This User Gave Thanks to TehOne For This Post:
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. 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

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

4. Shell Programming and Scripting

Question about REGEX Patterns and Case Sensitivity?

Hello All, I'm in the middle of a script and I'm doing some checks with REGEX (i.e. using the '"shopt -s nocasematch" that at least the first one should print "FALSE" but it prints "TRUE"..? For Example: #!/bin/bash MY_VAR="HELLO" ### This prints "TRUE" PATTERN_1="^*" if ] then... (5 Replies)
Discussion started by: mrm5102
5 Replies

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

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] recognise new line regex in case statement

Hi, I'm trying to write a routine to parse a file that contains data that will be read into arrays. The file is composed of labels to identify data types and arbitrary lines of data with the usual remarks and empty new lines as is common with config files. The initial pass is built as so:... (3 Replies)
Discussion started by: ASGR
3 Replies

9. Shell Programming and Scripting

How to specify 'not case sensitive' in regex (nawk, sed, patern expencions)?

Is it possible to make the search in regular exprecion or in matching parts of sed, nawk and others to IGNORE the case of the search string? I mean, like if used 'grep' with -i option: > grep -i "abc" file I would like to be able to do the same, say, by nawk: > nawk '/abc/ {print $0}'... (4 Replies)
Discussion started by: alex_5161
4 Replies

10. UNIX for Dummies Questions & Answers

anchoring regex using case and ksh

Outside this process I built a file containing snmp response filtering for hostname, model type and ios version. I want to get a count across the network of those devices running 11.x code, 12.0 mainline, 12.0 T train and above, 12.1 and above and OS levels. This works ok .. but its cheap... (2 Replies)
Discussion started by: popeye
2 Replies
Login or Register to Ask a Question