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

De Justine's wiki
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
 
(Une version intermédiaire par la même utilisatrice non affichée)
Ligne 1 : Ligne 1 :
 
[[Category:prog]]
[[Category:bash]]
Issu de : [https://www.linuxjournal.com/content/pattern-matching-bash https://www.linuxjournal.com/content/pattern-matching-bash]  
Issu de : [https://www.linuxjournal.com/content/pattern-matching-bash https://www.linuxjournal.com/content/pattern-matching-bash]  


Ligne 40 : Ligne 41 :
|}
|}


  Exemples :
  Exemples :
<pre>$ ls
<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 49 :
a.jpg
a.jpg


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


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


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


$ ls&nbsp;!(*.jpg|*.gif)  # not a jpg or a gif
$ ls !(*.jpg|*.gif)  # not a jpg or a gif
c.png d.pdf ee.pdf
c.png d.pdf ee.pdf
</pre>
</source>
<pre><span class="gp">$</span> ls *.pdf
 
<span class="go">ee.pdf  e.pdf  .pdf</span>
<source>
$ ls *.pdf
ee.pdf  e.pdf  .pdf
 
$ls ?(e).pdf    # zero or one "e" allowed
e.pdf  .pdf


<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>
$ ls *(e).pdf    # zero or more "e"s allowed
<span class="go">e.pdf  .pdf</span>
ee.pdf  e.pdf  .pdf


<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>
$ ls +(e).pdf    # one or more "e"s allowed
<span class="go">ee.pdf  e.pdf .pdf</span>
ee.pdf  e.pdf


<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>
$ ls @(e).pdf    # only one e allowed
<span class="go">ee.pdf  e.pdf</span>
e.pdf
</source>


<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></pre>


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.
<pre>$ shopt +s extglob
<source>
$ shopt +s extglob


$ a=something
$ a=something
Ligne 89 : Ligne 96 :
$ 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</pre>
no
</source>
 
 
 


&nbsp;


&nbsp;


&nbsp;
&nbsp;

Dernière version du 22 juin 2022 à 12:09

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>