- Bash Cookbook
- Ron Brash Ganesh Naik
- 414字
- 2021-07-23 19:17:34
Using wildcards and regexes
As we saw in the previous section, there was this new concept of recursive functions and the introduction of wildcards. This section will extend upon those same fundamental primitives to create more advanced searches using regexes and globbing.
It will also extend them with a number of built-in Bash features, and some one-liners (nifty tricks) to enhance our searches. In short:
- A wildcard can be: *, {*.ooh,*.ahh}, /home/*/path/*.txt, [0-10], [!a], ?, [a,p] m
- A regex can be: $, ^, *, [], [!], | (be careful to escape this)
Globbing basically refers to a far more computer-eccentric term, which can be simply described in layman terms as extended pattern matching. Wildcards are the symbols used to describe patterns, and regex is short for regular expression, which are terms used to describe the pattern that is to match a series of data.
As we can imagine, globbing and pattern matching are really useful, but they cannot be used by every utility or application. Usually, though, they can be used at the command line with utilities such as grep. For example:
$ ls -l | grep '[[:lower:]][[:digit:]]' # Notice no result
$ touch z0.test
$ touch a1.test
$ touch A2.test
$ ls -l | grep '[[:lower:]][[:digit:]]'
-rw-rw-r-- 1 rbrash rbrash 0 Nov 15 11:31 z0.test
-rw-rw-r-- 1 rbrash rbrash 0 Nov 15 11:31 a1.test
Using the ls command, which is piped into grep with a regex, we can see that after we touch three files and re-run the command that the regex allowed us to correctly filter the output for files starting with a lowercase character, which are followed by a single digit.
If we wanted to further enhance grep (or another command), we could use any of the following:
- [:alpha:]: Alphabetic (case-insensitive)
- [:lower:]: Lowercase printable characters
- [:upper:]: Uppercase printable characters
- [:digit:]: Numbers in decimal 0 to 9
- [:alnum:]: Alphanumeric (all digits and alphabetic characters)
- [:space:]: White space meaning spaces, tabs, and newlines
- [:graph:]: Printable characters excluding spaces
- [:print:]: Printable characters including spaces
- [:punct:]: Punctuation (for example, a period)
- [:cntrl:]: Control characters (non-printable characters like when a signal is generated when you use Ctrl + C)
- [:xdigit:]: Hexadecimal characters
- 零起步玩轉掌控板與Mind+
- 造個小程序:與微信一起干件正經事兒
- SQL for Data Analytics
- Hands-On JavaScript High Performance
- YARN Essentials
- Mastering Apache Spark 2.x(Second Edition)
- Access 2010數據庫應用技術(第2版)
- Mastering ROS for Robotics Programming
- 現代C++編程實戰:132個核心技巧示例(原書第2版)
- Regression Analysis with Python
- Android系統下Java編程詳解
- Python機器學習與量化投資
- Learning Concurrency in Python
- Hack與HHVM權威指南
- Modular Programming with JavaScript