Regular expressions (Bash): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
Regel 54: Regel 54:
  
 
Really cool stuff: [[Substring extraction (Bash)]]
 
Really cool stuff: [[Substring extraction (Bash)]]
 +
 +
== Logical OR ==
  
 
== See also ==
 
== See also ==

Versie van 14 okt 2022 20:52

Regular expressions, or regex to make it sound more mysterious, are the black magic of programming. It's like doing mathematics with text. Or slightly more specific: advanced pattern matching.

Places where you find regex:

  • In grep for filtering output of a command
  • In comparisons, through use of the operator =~
  • Probably lots of other places.

I have the impression that regular expressions (regex) in Bash may not be the same as in MySQL, hence some more details in this article.

Match a substring

Probably the easiest case - No special characters or whatever needed:

i="blub"; [[ $i =~ blubber ]] && echo "i contains the substring 'blubber' "   # False
i="blub"; [[ $i =~ blub ]] && echo "i contains the substring 'blub' "   # True

Match a single digit

[] denotes single character-comparison, meaning that the comparison is true as soon as the string contains one of the characters indicated within [].

[[ $i =~ [2] ]] && echo "i contains '2'"
[[ $i =~ [12] ]] && echo "i contains '1' and/or '2'"

Match ranges of numbers or letters

i="blub"; [[ $i =~ [0-9] ]] && echo "i contains a number"   # False
i="blu1"; [[ $i =~ [0-9] ]] && echo "i contains a number"   # True
i="1111"; [[ $i =~ [0-9] ]] && echo "i contains a number"   # True

i="blub"; [[ $i =~ [A-Z] ]] && echo "i contains at least one uppercase letter"   # False
i="BLUB"; [[ $i =~ [A-Z] ]] && echo "i contains at least one uppercase letter"   # True
i="blub"; [[ $i =~ [a-z] ]] && echo "i contains at least one lowercase letter"   # True

i="blub"; [[ $i =~ [a-zA-Z] ]] && echo "i contains at least one letter"   # True

Sequences

  • ^: Beginning of the string
  • $: End of the string
i="BLuB"; [[ $i =~ ^[A-Z]+$ ]] && echo "i contains only capital letters"   # False
i="BLUB"; [[ $i =~ ^[A-Z]+$ ]] && echo "i contains only capital letters"   # True

Capture group

Really cool stuff: Substring extraction (Bash)

Logical OR

See also

Sources