Bash : Pattern Matching
Issu de : https://www.linuxjournal.com/content/pattern-matching-bash 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 :
$ 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
<span class="gp">$</span> ls *.pdf <span class="go">ee.pdf e.pdf .pdf</span> <span class="gp">$</span> ls ?<span class="o">(</span>e<span class="o">)</span>.pdf <span class="c1"># zero or one "e" allowed</span> <span class="go">e.pdf .pdf</span> <span class="gp">$</span> ls *<span class="o">(</span>e<span class="o">)</span>.pdf <span class="c1"># zero or more "e"s allowed</span> <span class="go">ee.pdf e.pdf .pdf</span> <span class="gp">$</span> ls +<span class="o">(</span>e<span class="o">)</span>.pdf <span class="c1"># one or more "e"s allowed</span> <span class="go">ee.pdf e.pdf</span> <span class="gp">$</span> ls @<span class="o">(</span>e<span class="o">)</span>.pdf <span class="c1"># only one e allowed</span> <span class="go">e.pdf</span>
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.
$ shopt +s extglob $ a=something $ if [[ $a == +(some|any)thing ]]; then echo yes; else echo no; fi yes $ a=anything $ if [[ $a == +(some|any)thing ]]; then echo yes; else echo no; fi yes $ a=nothing $ if [[ $a == +(some|any)thing ]]; then echo yes; else echo no; fi no