Have you ever mixed up regex and glob patterns? Those
*.txt patterns you may have done on your terminal are not regex patterns. They are glob patterns. Though they are similar, they work differently and in different environments.
In this short article, I will explain the similarities and differences between regex and glob patterns.
Regex and Glob patterns are similar ways of matching patterns in strings. The main difference is that the regex pattern matches strings in code, while globbing matches file names or file content in the terminal.
Globbing is the shell's way of providing regular expression patterns like other programming languages.
Another big difference is that regex has more options and features than glob patterns. It's more advanced, and globbing has fewer options to get you through your search faster.
The scope of this article does not cover globbing and regex patterns in-depth, but here are some basic examples of how they are used.
If you want to check if a string has a specific word, say "world", you can use this regex pattern:
const regex = /.*world.*/ const word1 = "hello world how is it" const word2 = "my word is here" console.log(regex.test(word1)) // true console.log(regex.test(word2)) // false
If you want to check if a string ends with a specific word, say "world", you can use this regex pattern:
const regex = /.*world$/ const word1 = "this is my world" const word2 = "this is your world " console.log(regex.test(word1)) // true console.log(regex.test(word2)) // false
These are all basic examples, of course. The goal is to show you how regex works in code.
The terminal uses globbing for file name matching. Here are some examples.
If you wanted to copy all .txt files in a directory to another directory, for example, instead of typing:
cp file.txt file2.txt file3.txt ./text-files # copy all files to the ./text-files directory
You can define a glob pattern that matches all the .txt files and copy all the matches like this:
cp *.txt ./text-files
This command copies all the files with the extension
.txt to the text-files directory. The asterisk (*) serves as a wildcard that matches any number and mixture of characters before the ".txt" extension in the file name.
Let's say you wanted to list all text files that have names of 5 characters. You can use the ? character. This character matches any single character. It's similar to a wildcard, but the difference is that the ? character matches any single character, while the * character matches multiple characters.
To match files with five characters, you can use the following pattern:
This command will list all the files in the current directory with five characters before the extension in their name.
Since globbing works on the terminal, you can use it with CLI tools/commands that support it. For example, as we've seen in the examples, you can use the
ls commands. You can also use it with
git like this:
git add *.js
This command will match all the files with the extension
.js and add them to the staging area.
Globbing is the terminal's way of defining regular expressions for file names or file content. It is also less powerful than regex, as regex has more features. However, regex works in code across different programming languages while globbing works in the terminal.