官术网_书友最值得收藏!

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.

Globbing in Bash is powerful, but likely not the best place to perform even more advanced or intricate pattern matching. In these cases, Python or another language/tool might be more appropriate.

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
主站蜘蛛池模板: 布拖县| 正定县| 永春县| 天峨县| 宜良县| 垦利县| 利辛县| 凤凰县| 石狮市| 兴城市| 青海省| 香港| 洞头县| 湖北省| 乌拉特中旗| 黑山县| 长寿区| 灵川县| 读书| 平塘县| 梅河口市| 广南县| 宁海县| 祁阳县| 河西区| 仙居县| 八宿县| 固阳县| 龙口市| 绥宁县| 泸西县| 乡城县| 积石山| 鄱阳县| 黔西县| 江城| 精河县| 靖宇县| 偃师市| 雅安市| 曲水县|