Bird
Raised Fist0
Bash Scriptingscripting~5 mins

Capture groups in Bash in Bash Scripting - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a capture group in Bash regular expressions?
A capture group is a part of a regular expression enclosed in parentheses. It saves the matched text so you can use it later in your script.
Click to reveal answer
beginner
How do you access the text matched by a capture group in Bash?
You can access the matched text using the special array variable BASH_REMATCH. BASH_REMATCH[0] is the full match, BASH_REMATCH[1] is the first capture group, and so on.
Click to reveal answer
beginner
Example: What does this Bash code print?
[[ "hello123" =~ ([a-z]+)([0-9]+) ]]
echo "${BASH_REMATCH[1]}"
echo "${BASH_REMATCH[2]}"
It prints: hello 123 The first capture group ([a-z]+) matches 'hello', the second ([0-9]+) matches '123'.
Click to reveal answer
beginner
Why use capture groups in Bash scripts?
Capture groups let you extract parts of a string easily. For example, you can get a username from an email or a number from a filename without complicated commands.
Click to reveal answer
beginner
What command structure is needed to use capture groups in Bash?
You use the double square brackets [[ ]] with the =~ operator to test a string against a regex with capture groups. Example:
[[ "$string" =~ regex ]]
Click to reveal answer
In Bash, which variable holds the text matched by capture groups after a regex test?
AMATCH_GROUPS
BBASH_REMATCH
CREGEX_CAPTURE
DGROUP_MATCH
What does BASH_REMATCH[0] contain after a regex match?
AThe first capture group
BThe regex pattern
CThe entire matched string
DThe last capture group
Which operator is used inside [[ ]] to test a regex with capture groups in Bash?
A=~
B==
C!=
D=>
How do you write a capture group in a Bash regex?
A[ ]
B{ }
C< >
D( )
What will happen if you try to access BASH_REMATCH before a successful regex match?
AIt will be empty or unset
BIt will contain the previous match
CIt will cause an error
DIt will contain the regex pattern
Explain how to use capture groups in Bash to extract parts of a string.
Think about how you test a string and then get parts of it.
You got /4 concepts.
    Describe a simple real-life example where capture groups in Bash can help automate a task.
    Imagine you want to get just a piece of text from a bigger string.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does the BASH_REMATCH array hold after a successful regex match in Bash?
      easy
      A. The full matched string at index 0 and captured groups from index 1 onwards
      B. Only the captured groups without the full match
      C. The regex pattern used for matching
      D. The exit status of the last command

      Solution

      1. Step 1: Understand BASH_REMATCH usage

        When using [[ string =~ regex ]], Bash stores the full matched text in BASH_REMATCH[0].
      2. Step 2: Identify captured groups storage

        Captured groups from parentheses in the regex are stored starting at BASH_REMATCH[1] onwards.
      3. Final Answer:

        The full matched string at index 0 and captured groups from index 1 onwards -> Option A
      4. Quick Check:

        BASH_REMATCH = full match + groups [OK]
      Hint: Remember index 0 is full match, groups start at 1 [OK]
      Common Mistakes:
      • Thinking BASH_REMATCH holds only groups
      • Confusing BASH_REMATCH with exit status
      • Expecting regex pattern in BASH_REMATCH
      2. Which of the following is the correct syntax to test if a string matches a regex and capture groups in Bash?
      easy
      A. match $string $regex
      B. if ($string =~ $regex); then
      C. [[ $string =~ $regex ]]
      D. test $string =~ $regex

      Solution

      1. Step 1: Recall Bash regex match syntax

        Bash uses the conditional expression [[ string =~ regex ]] to test regex matches.
      2. Step 2: Identify correct syntax among options

        Only [[ $string =~ $regex ]] uses the correct Bash syntax with double brackets and the =~ operator.
      3. Final Answer:

        [[ $string =~ $regex ]] -> Option C
      4. Quick Check:

        Use [[ ]] with =~ for regex match [OK]
      Hint: Use double brackets [[ ]] with =~ for regex matching [OK]
      Common Mistakes:
      • Using single brackets [ ] which don't support =~
      • Using parentheses () like in other languages
      • Using commands like test or match incorrectly
      3. What will be the output of this Bash script?
      string="user:1234"
      if [[ $string =~ ([a-z]+):([0-9]+) ]]; then
      echo "Name=${BASH_REMATCH[1]}, ID=${BASH_REMATCH[2]}"
      fi
      medium
      A. Name=user, ID=1234
      B. Name=user:1234, ID=
      C. Name=, ID=
      D. Syntax error

      Solution

      1. Step 1: Analyze regex and string

        The regex ([a-z]+):([0-9]+) matches letters before colon and digits after colon in the string "user:1234".
      2. Step 2: Check captured groups in BASH_REMATCH

        BASH_REMATCH[1] captures "user" and BASH_REMATCH[2] captures "1234".
      3. Final Answer:

        Name=user, ID=1234 -> Option A
      4. Quick Check:

        Captured groups print correct values [OK]
      Hint: Captured groups appear in BASH_REMATCH starting at index 1 [OK]
      Common Mistakes:
      • Expecting full string in BASH_REMATCH[1]
      • Forgetting to use double brackets [[ ]]
      • Misreading regex pattern
      4. Identify the error in this Bash snippet:
      string="abc123"
      if [[$string =~ ([a-z]+)([0-9]+)]]; then
      echo "${BASH_REMATCH[1]} and ${BASH_REMATCH[2]}"
      fi
      medium
      A. Regex pattern is invalid
      B. Missing spaces inside [[ and ]]
      C. BASH_REMATCH is not set by =~ operator
      D. Using single brackets instead of double brackets

      Solution

      1. Step 1: Check syntax of conditional expression

        The conditional expression [[ ... ]] requires spaces after [[ and before ]]. The snippet misses spaces.
      2. Step 2: Confirm regex and BASH_REMATCH usage

        The regex is valid and BASH_REMATCH is set correctly when using =~ inside [[ ]].
      3. Final Answer:

        Missing spaces inside [[ and ]] -> Option B
      4. Quick Check:

        Spaces needed inside [[ and ]] [OK]
      Hint: Always put spaces after [[ and before ]] [OK]
      Common Mistakes:
      • Omitting spaces inside [[ ]]
      • Confusing single [ ] with [[ ]]
      • Assuming regex pattern is wrong
      5. You want to extract the domain and path from a URL string in Bash using capture groups. Which regex and code snippet correctly captures domain and path?
      url="https://example.com/path/to/page"
      if [[ $url =~ https://([^/]+)(/.*) ]]; then
      echo "Domain: ${BASH_REMATCH[1]}"
      echo "Path: ${BASH_REMATCH[2]}"
      fi
      hard
      A. Captures domain and path but misses https:// prefix
      B. BASH_REMATCH does not support multiple groups
      C. Fails because regex does not escape dots
      D. Correctly captures domain as example.com and path as /path/to/page

      Solution

      1. Step 1: Analyze regex pattern

        The regex https://([^/]+)(/.*) matches 'https://' literally, then captures domain (any chars except '/') and path (slash followed by anything).
      2. Step 2: Check BASH_REMATCH usage

        BASH_REMATCH[1] holds domain, BASH_REMATCH[2] holds path, correctly extracted from the URL.
      3. Final Answer:

        Correctly captures domain as example.com and path as /path/to/page -> Option D
      4. Quick Check:

        Regex groups extract domain and path correctly [OK]
      Hint: Use ([^/]+) for domain and (/.*) for path [OK]
      Common Mistakes:
      • Not escaping dots in regex (not needed inside character class)
      • Assuming BASH_REMATCH can't hold multiple groups
      • Missing literal https:// in regex
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard