« Bash : Pattern Matching » : différence entre les versions

De Justine's wiki
Aller à la navigation Aller à la recherche
(Page créée avec « 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 (* e... »)
 
Aucun résumé des modifications
Ligne 1 : Ligne 1 :
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 :  
 
Issu de : [https://www.linuxjournal.com/content/pattern-matching-bash 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 :
 
{| class="docutils" border="1"
{| class="docutils" border="1"
|-
|-
Ligne 29 : Ligne 39 :
| Match anything that doesn't match one of the patterns (extglob)
| Match anything that doesn't match one of the patterns (extglob)
|}
|}
&nbsp; Exemples : <pre>$ ls
 
&nbsp; Exemples&nbsp;:
<pre>$ ls
a.jpg  b.gif  c.png  d.pdf ee.pdf
a.jpg  b.gif  c.png  d.pdf ee.pdf


Ligne 35 : Ligne 47 :
a.jpg
a.jpg


$ ls ?.pdf
$ ls&nbsp;?.pdf
d.pdf
d.pdf


Ligne 43 : Ligne 55 :
$ shopt -s extglob  # turn on extended globbing
$ shopt -s extglob  # turn on extended globbing


$ ls ?(*.jpg|*.gif)
$ ls&nbsp;?(*.jpg|*.gif)
a.jpg  b.gif
a.jpg  b.gif


$ ls !(*.jpg|*.gif)  # not a jpg or a gif
$ ls&nbsp;!(*.jpg|*.gif)  # not a jpg or a gif
c.png d.pdf ee.pdf
c.png d.pdf ee.pdf
</pre>
</pre>
Ligne 52 : Ligne 64 :
<span class="go">ee.pdf  e.pdf  .pdf</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"># zero or one "e" allowed</span>
<span class="gp">$</span> ls&nbsp;?<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="go">e.pdf  .pdf</span>



Version du 16 avril 2019 à 12:27

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 :

$ 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