[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Regular expressions with word boundaries no longer working in bash
From: |
Chet Ramey |
Subject: |
Re: Regular expressions with word boundaries no longer working in bash |
Date: |
Sat, 18 Dec 2010 22:44:09 -0500 |
User-agent: |
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.8) Gecko/20100802 Lightning/1.0b2 Thunderbird/3.1.2 |
On 12/17/10 12:00 PM, Harry Leitzell wrote:
> Bash Version: 4.1
> Patch Level: 5
> Release Status: release
>
> Description:
>
> Doing string matching based on word boundaries no longer works:
>
> $ bash --version
> GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
> Copyright (C) 2005 Free Software Foundation, Inc.
>
> $ cat test.sh
> input="foocombo foo foo bar bar foo bar some stuff foo" # the input
> expected="foocombo foo bar some stuff" # this what we expect
> for i in ${input[@]}; do
> [[ ! ${old[@]} =~ \\b"${i}"\\b ]] && old=( ${old[@]} $i )
> done
> for i in ${input[@]}; do
> [[ ! ${new[@]} =~ \b${i}\b ]] && new=( ${new[@]} $i )
> done
> echo "input: $input"
> echo "expected: $expected"
> echo "old code: ${old[*]}"
> echo "new code: ${new[*]}"
>
> $ bash test.sh
> input: foocombo foo foo bar bar foo bar some stuff foo
> expected: foocombo foo bar some stuff
> old code: foocombo foo bar some stuff
> new code: foocombo foo foo bar bar foo bar some stuff foo
I don't know what version of Ubuntu you're running -- I'm not sure
which various versions of bash-3.2 are on Ubuntu 8, 9, or 10 -- but
using either your "old code" pattern after setting the `compat31'
option with shopt or the following
wb='\b'
${wb}${i}${wb}
will work. This is one of the reasons the compat31 option, and the
notion of a shell compatibility level, exists. A shell variable will
usually do the job, too.
Item 33 in COMPAT and item E14 in the Bash FAQ cover the issue in
more detail.
Chet
--
``The lyf so short, the craft so long to lerne.'' - Chaucer
``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRU chet@case.edu http://cnswww.cns.cwru.edu/~chet/