« Bash : Pattern Matching » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 40 : | Ligne 40 : | ||
|} | |} | ||
Exemples : | |||
< | <source> | ||
$ ls | |||
a.jpg b.gif c.png d.pdf ee.pdf | a.jpg b.gif c.png d.pdf ee.pdf | ||
Ligne 47 : | Ligne 48 : | ||
a.jpg | a.jpg | ||
$ ls | $ ls ?.pdf | ||
d.pdf | d.pdf | ||
Ligne 55 : | Ligne 56 : | ||
$ shopt -s extglob # turn on extended globbing | $ shopt -s extglob # turn on extended globbing | ||
$ ls | $ ls ?(*.jpg|*.gif) | ||
a.jpg b.gif | a.jpg b.gif | ||
$ ls | $ ls !(*.jpg|*.gif) # not a jpg or a gif | ||
c.png d.pdf ee.pdf | c.png d.pdf ee.pdf | ||
</ | </source> | ||
< | <source> | ||
$ ls *.pdf | |||
ee.pdf e.pdf .pdf | |||
$ls ?(e).pdf # zero or one "e" allowed | |||
e.pdf .pdf | |||
$ ls *(e).pdf # zero or more "e"s allowed | |||
ee.pdf e.pdf .pdf | |||
$ ls +(e).pdf # one or more "e"s allowed | |||
ee.pdf e.pdf | |||
$ ls @(e).pdf # only one e allowed | |||
e.pdf | |||
</source> | |||
Les glob sont juste une autre façon de trouver des patterns spécifique en bash, et on peut les utiliser un peu partout; après un ==, dans un case, etc. | Les glob sont juste une autre façon de trouver des patterns spécifique en bash, et on peut les utiliser un peu partout; après un ==, dans un case, etc. | ||
< | <source> | ||
$ shopt +s extglob | |||
$ a=something | $ a=something | ||
Ligne 89 : | Ligne 95 : | ||
$ a=nothing | $ a=nothing | ||
$ if [[ $a == +(some|any)thing ]]; then echo yes; else echo no; fi | $ if [[ $a == +(some|any)thing ]]; then echo yes; else echo no; fi | ||
no</ | no | ||
</source> | |||
| |
Version du 15 février 2022 à 10:54
Issu de : https://www.linuxjournal.com/content/pattern-matching-bash
Ressources :
https://www.tldp.org/LDP/abs/html/globbingref.html
Globbing
Il s'agit ici de "globbing", c'est-à-dire, l'expansion des fonctionnalités des wildcards (* et ?). Il ne s'agit donc pas ici d'expression régulières, bien que celles-ci puissent être utilisées conjointement avec du globbing. Les patterns de glob de Bash sont les suivants :
Pattern | Description |
---|---|
* | Match zero or more characters |
? | Match any single character |
[...] | Match any of the characters in a set |
?(patterns) | Match zero or one occurrences of the patterns (extglob) |
*(patterns) | Match zero or more occurrences of the patterns (extglob) |
+(patterns) | Match one or more occurrences of the patterns (extglob) |
@(patterns) | Match one occurrence of the patterns (extglob) |
!(patterns) | Match anything that doesn't match one of the patterns (extglob) |
Exemples :
<source> $ ls a.jpg b.gif c.png d.pdf ee.pdf
$ ls *.jpg a.jpg
$ ls ?.pdf d.pdf
$ ls [ab]* a.jpg b.gif
$ shopt -s extglob # turn on extended globbing
$ ls ?(*.jpg|*.gif) a.jpg b.gif
$ ls !(*.jpg|*.gif) # not a jpg or a gif c.png d.pdf ee.pdf </source>
<source> $ ls *.pdf ee.pdf e.pdf .pdf
$ls ?(e).pdf # zero or one "e" allowed e.pdf .pdf
$ ls *(e).pdf # zero or more "e"s allowed ee.pdf e.pdf .pdf
$ ls +(e).pdf # one or more "e"s allowed ee.pdf e.pdf
$ ls @(e).pdf # only one e allowed e.pdf </source>
Les glob sont juste une autre façon de trouver des patterns spécifique en bash, et on peut les utiliser un peu partout; après un ==, dans un case, etc.
<source>
$ shopt +s extglob
$ a=something $ if any)thing ; then echo yes; else echo no; fi yes
$ a=anything $ if any)thing ; then echo yes; else echo no; fi yes
$ a=nothing $ if any)thing ; then echo yes; else echo no; fi no </source>