Bash =~ operator and tab characters

Karl Auer kauer at
Sun Apr 24 14:31:43 UTC 2016

On Sun, 2016-04-24 at 15:08 +0200, Johnny Rosenberg wrote:
> I need to check a lot of strings for the following:
> TAB ( <at least 4 and not more than 10 numbers or minuses> ) TAB


while read LINE ; do
   if [[ $LINE =~ $'\t'[0-9\-]{4,10}$'\t' ]] ; then
      echo "$LINE"

Redirect or pipe your data into the above script and it will echo all
matching lines. Not well tested. Note that the regexp does not check
for formatted dates - just for exactly what you said :-)

Obviously you can do whatever else you want inside the if statement.

Oh, and I'm pretty sure the "$'\t'" construct is a bashism.

You can't match on tabs nicely in any shell I know of (not that I know
them all). For heavy duty text processing you are generally better off
with a language like perl or awk.

Regards, K.

Karl Auer (kauer at

GPG fingerprint: E00D 64ED 9C6A 8605 21E0 0ED0 EE64 2BEE CBCB C38B
Old fingerprint: 3C41 82BE A9E7 99A1 B931 5AE7 7638 0147 2C3C 2AC4

More information about the ubuntu-users mailing list