« Bash : Traitement sur les chaînes » : 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
 
(4 versions intermédiaires par la même utilisatrice non affichées)
Ligne 1 : Ligne 1 :
 
[[Category:prog]]
= Longueur et sélection d'une chaîne =
[[Category:bash]]
 
=Longueur et sélection d'une chaîne=
Comme Bash permet d'avoir le résultat d'une commande externe facilement, on peut avoir accès à un nombre étonnament grand d'opérations diverses à faire pour manipuler des chaînes. On va se contenter ici des opération natives et laisserons de côté les expr, sed, grep...
Comme Bash permet d'avoir le résultat d'une commande externe facilement, on peut avoir accès à un nombre étonnament grand d'opérations diverses à faire pour manipuler des chaînes. On va se contenter ici des opération natives et laisserons de côté les expr, sed, grep...
==Longueur==
On peut avoir la longueur d'une chaîne avec la syntaxe ${#variable}:


== Longueur ==
On peut avoir la longueur d'une chaîne avec la syntaxe ${#variable} :
<pre>BASH $> varNom="John O'Daly"
BASH $> echo ${#varNom}
11
BASH $></pre>


== Position et longueur ==


On peut extraire un morceau de chaîne un peu à la manière de Python avec l'expression ${variable:position:[longueur]}. La longueur est optionnelle&nbsp;: si on ne la précise pas, l'extraction se fera jusqu'à la fin de la chaîne. La position de départ peut être négative, et dans ce cas l'extraction se fera à partir de la fin (comme en Python...).
<pre>BASH $> varNomFichier="20160405_ERR_application.log"


BASH $> echo ${varNomFichier:9:15}
<pre>BASH $> varNom="John O'Daly"<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${#varNom}<br data-attributes="class=%22mw_emptyline_first%22">11<br data-attributes="class=%22mw_emptyline_first%22">BASH $></pre>


ERR_application
==Position et longueur==
On peut extraire un morceau de chaîne un peu à la manière de Python avec l'expression ${variable:position:[longueur]}. La longueur est optionnelle: si on ne la précise pas, l'extraction se fera jusqu'à la fin de la chaîne. La position de départ peut être négative, et dans ce cas l'extraction se fera à partir de la fin (comme en Python...).


BASH $> echo ${varNomFichier:9}


ERR_application.log


BASH $> echo ${varNomFichier:(-4)}


.log</pre>
<pre>BASH $> varNomFichier="20160405_ERR_application.log"<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier:9:15}<br data-attributes="class=%22mw_emptyline_first%22">ERR_application<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier:9}<br data-attributes="class=%22mw_emptyline_first%22">ERR_application.log<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier:(-4)}<br data-attributes="class=%22mw_emptyline_first%22">.log</pre>
 
= Extraction de chaînes =
 
== En enlevant des caractères au début ou à la fin ==


=Extraction de chaînes=
==En enlevant des caractères au début ou à la fin==
Il est possible de supprimer à partir du début d'une chaîne la plus petite ${variable#critère} ou la plus grande ${variable##critère} occurrence d'un critère de recherche. L'utilisation du symbole joker * permet de faire la recherche sur une suite de caractère non définis.
Il est possible de supprimer à partir du début d'une chaîne la plus petite ${variable#critère} ou la plus grande ${variable##critère} occurrence d'un critère de recherche. L'utilisation du symbole joker * permet de faire la recherche sur une suite de caractère non définis.
<pre>BASH $> varNomFichier="20160405_ERR_application.log"
BASH $> echo ${varNomFichier#20160405_}
ERR_application.log
BASH $> echo ${varNomFichier#*_}


ERR_application.log


BASH $> echo ${varNomFichier#*ERR_}


application.log


BASH $> echo ${varNomFichier##*_}
<pre>BASH $> varNomFichier="20160405_ERR_application.log"<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier#20160405_}<br data-attributes="class=%22mw_emptyline_first%22">ERR_application.log<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier#*_}<br data-attributes="class=%22mw_emptyline_first%22">ERR_application.log<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier#*ERR_}<br data-attributes="class=%22mw_emptyline_first%22">application.log<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier##*_}<br data-attributes="class=%22mw_emptyline_first%22">application.log</pre>
 
application.log</pre>


Il est possible de supprimer à partir de la fin d'une chaîne la plus petite ${variable%critère} ou la plus grande ${variable%%critère} occurrence d'un critère de recherche. L'utilisation du symbole * permet de faire la recherche sur une suite de caractère non définis.
Il est possible de supprimer à partir de la fin d'une chaîne la plus petite ${variable%critère} ou la plus grande ${variable%%critère} occurrence d'un critère de recherche. L'utilisation du symbole * permet de faire la recherche sur une suite de caractère non définis.
<pre>BASH $> varNomFichier="20160405_ERR_application.log"
<pre>BASH $> varNomFichier="20160405_ERR_application.log"<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier%.log}<br data-attributes="class=%22mw_emptyline_first%22">20160405_ERR_application<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier%.*}<br data-attributes="class=%22mw_emptyline_first%22">20160405_ERR_application<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier%%_*}<br data-attributes="class=%22mw_emptyline_first%22">20160405<br data-attributes="class=%22mw_emptyline_first%22">BASH $><br data-attributes="class=%22mw_emptyline_first%22"></pre>
 
BASH $> echo ${varNomFichier%.log}
 
20160405_ERR_application
 
BASH $> echo ${varNomFichier%.*}
 
20160405_ERR_application
 
BASH $> echo ${varNomFichier%%_*}
 
20160405
 
BASH $>
 
</pre>
 
= Recherche et remplacement =
 
== Remplacement basique d'une chaîne par une autre ==


=Recherche et remplacement=
==Remplacement basique d'une chaîne par une autre==
On peut remplacer une ( ${/variable/recherche/remplace} ou plusieurs ( ${variable//recherche/remplace}) occurences d'une chaîne recherchée. Si on laisse vide la chaîne de remplacement, cela équivaut à la supprimer.
On peut remplacer une ( ${/variable/recherche/remplace} ou plusieurs ( ${variable//recherche/remplace}) occurences d'une chaîne recherchée. Si on laisse vide la chaîne de remplacement, cela équivaut à la supprimer.
<pre>BASH $> varNomFichier="mon fichier save du jour.save"
BASH $> echo ${varNomFichier/ /_}
mon_fichier save du jour.save
BASH $> echo ${varNomFichier// /_}
mon_fichier_save_du_jour.save


BASH $> echo ${varNomFichier//save/log}


mon fichier log du jour.log


BASH $> echo ${varNomFichier//save/}


mon fichier du jour.
<pre>BASH $> varNomFichier="mon fichier save du jour.save"<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier/ /_}<br data-attributes="class=%22mw_emptyline_first%22">mon_fichier save du jour.save<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier// /_}<br data-attributes="class=%22mw_emptyline_first%22">mon_fichier_save_du_jour.save<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier//save/log}<br data-attributes="class=%22mw_emptyline_first%22">mon fichier log du jour.log<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier//save/}<br data-attributes="class=%22mw_emptyline_first%22">mon fichier du jour.<br data-attributes="class=%22mw_emptyline_first%22">BASH $></pre>
 
BASH $></pre>
 
== Remplacement avancé ==


==Remplacement avancé==
On peut aussi combiner les critères de recherches avec des expressions, des extractions en début ou en fin de chaîne; le critère de remplacement peut lui aussi être une expression.
On peut aussi combiner les critères de recherches avec des expressions, des extractions en début ou en fin de chaîne; le critère de remplacement peut lui aussi être une expression.
<pre>BASH $> varNomFichier="mon fichier save du jour.save"
BASH $> echo ${varNomFichier/m*r/20160809}
20160809.save
BASH $> echo ${varNomFichier/#*du/$(date +'%Y%m%d')}


20160809 jour.save


BASH $> echo ${varNomFichier/%save/log}


mon fichier save du jour.log</pre>


= Traitement avancé =
<pre>BASH $> varNomFichier="mon fichier save du jour.save"<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier/m*r/20160809}<br data-attributes="class=%22mw_emptyline_first%22">20160809.save<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier/#*du/$(date +'%Y%m%d')}<br data-attributes="class=%22mw_emptyline_first%22">20160809 jour.save<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier/%save/log}<br data-attributes="class=%22mw_emptyline_first%22">mon fichier save du jour.log</pre>


== comm - Comparer deux fichiers ligne à ligne ==
=Traitement avancé=
 
==comm - Comparer deux fichiers ligne à ligne==
comm prend deux fichiers, qui doivent être triés et dans le même ordre. Il fait ensuite trois colonnes&nbsp;:
comm prend deux fichiers, qui doivent être triés et dans le même ordre. Il fait ensuite trois colonnes:
 
* Elements spécifiques au fichier 1  
*Elements spécifiques au fichier 1  
* Elements spécifiques au fichier 2  
*Elements spécifiques au fichier 2  
* Elements communs  
*Elements communs  


On peut ensuite supprimer des élements avec -1, -2, -3
On peut ensuite supprimer des élements avec -1, -2, -3
<pre>[root@vigie differentielgroupes]# comm test1 test2
<pre>[root@vigie differentielgroupes]# comm test1 test2               a               b<br data-attributes="class=%22mw_emptyline%22">bb               c               d<br data-attributes="class=%22mw_emptyline%22">comm: le fichier 1 n'est pas dans l'ordre attendu<br data-attributes="class=%22mw_emptyline_first%22">        dd<br data-attributes="class=%22mw_emptyline%22">comm: le fichier 2 n'est pas dans l'ordre attendu</pre>
                a
                b
bb
                c
                d
comm: le fichier 1 n'est pas dans l'ordre attendu
 
        dd
comm: le fichier 2 n'est pas dans l'ordre attendu</pre>
 
=== La doc de Fred :) ===
<pre># exemple de COMM pour traiter deux commandes, sans fabriquer de fichier intermédiaire.
# On notera qu’on utilise SORT à chaque fois.
 
comm -13 <( /root/dossiers-grenache/jplus 90 \
          | cut -d ';' -f 1 \
          | sort -t ';' -k 1,1b ) \
        <( cat toutlemonde \
          | sort -t ';' -k 1,1b )
 
 
# Autre Exemple. On a deux sources. On veut les synchroniser comme des mirroirs. On les compare avec COMM
# et on fabrique des ADD puis des DEL.
 
 
echo ============ Connexion vers Renater : Dump LDAP


ldap-csvexport.pl -H ldap://localhost -f mail=* -b ou=People,dc=upec,dc=local -q '' -s ';' -a uid \
===La doc de Fred :)===
| sed 1d \
<pre># exemple de COMM pour traiter deux commandes, sans fabriquer de fichier intermédiaire.<ol><li>On notera qu’on utilise SORT à chaque fois.</li></ol><br data-attributes="class=%22mw_emptyline_first%22">comm -13 <( /root/dossiers-grenache/jplus 90 \          | cut -d ';' -f 1 \          | sort -t ';' -k 1,1b ) \        <( cat toutlemonde \          | sort -t ';' -k 1,1b )<br data-attributes="class=%22mw_emptyline_first%22"><br data-attributes="class=%22mw_emptyline%22"><ol><li>Autre Exemple. On a deux sources. On veut les synchroniser comme des mirroirs. On les compare avec COMM</li><li>et on fabrique des ADD puis des DEL.</li></ol><br data-attributes="class=%22mw_emptyline%22"><br data-attributes="class=%22mw_emptyline%22">echo ============ Connexion vers Renater : Dump LDAP<br data-attributes="class=%22mw_emptyline_first%22">ldap-csvexport.pl -H ldap://localhost -f mail=* -b ou=People,dc=upec,dc=local -q '' -s ';' -a uid \| sed 1d \| tr '|' "\n" \| sort -t ';' -k1,1b \<br data-attributes="class=%22mw_emptyline%22">> renater-ldap-dump.txt<br data-attributes="class=%22mw_emptyline_first%22">echo ============ Mise à jour du LDAP : ADD<br data-attributes="class=%22mw_emptyline_first%22">comm /etc/postfix/liste-dest renater-ldap-dump.txt -23 \| grep @ \| while read u ; do<br data-attributes="class=%22mw_emptyline%22">    echo "dn: uid=$u,ou=People,dc=upec,dc=local<br data-attributes="class=%22mw_emptyline%22">objectClass: person<br data-attributes="class=%22mw_emptyline%22">objectClass: organizationalPerson<br data-attributes="class=%22mw_emptyline%22">objectClass: inetOrgPerson<br data-attributes="class=%22mw_emptyline%22">sn: x<br data-attributes="class=%22mw_emptyline%22">cn: y<br data-attributes="class=%22mw_emptyline%22">mail: $u<br data-attributes="class=%22mw_emptyline%22">uid: $u<br data-attributes="class=%22mw_emptyline_first%22">"<br data-attributes="class=%22mw_emptyline%22">  done \| ldapadd -w "$RENATERPASS" -D "$RENATERUSER" -H ldapi:///<br data-attributes="class=%22mw_emptyline_first%22">echo ============ Mise à jour du LDAP : DEL<br data-attributes="class=%22mw_emptyline_first%22">comm /etc/postfix/liste-dest renater-ldap-dump.txt -13 \| grep @ \| sed -e 's/^/uid=/' -e 's/$/,ou=People,dc=upec,dc=local/' \| ldapdelete -v -w "$RENATERPASS" -D "$RENATERUSER" -H ldapi:///</pre>
| tr '|' "\n" \
==cut==
| sort -t ';' -k1,1b \
cut permet de couper des lignes en fonction d'un délimiteur que l'on lui donne :
> renater-ldap-dump.txt


echo ============ Mise à jour du LDAP : ADD


comm /etc/postfix/liste-dest renater-ldap-dump.txt -23 \
| grep @ \
| while read u ; do
    echo "dn: uid=$u,ou=People,dc=upec,dc=local
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
sn: x
cn: y
mail: $u
uid: $u


"
  done \
| ldapadd -w "$RENATERPASS" -D "$RENATERUSER" -H ldapi:///


echo ============ Mise à jour du LDAP : DEL
<pre class="mw_paragraph"> [root@gulliver ~]# cat /var/log/maillog | cut -d " " -f 1,2,3,4<br />May 12 09:52:29 gulliver</pre>
* -d : le délimiteur choisi (ici un espace"
* -f : les champs à afficher


comm /etc/postfix/liste-dest renater-ldap-dump.txt -13 \
==sed==
| grep @ \
sed est un éditeur de flux. Il permet plusieurs choses, entre autres trouver et remplacer :  
| sed -e 's/^/uid=/' -e 's/$/,ou=People,dc=upec,dc=local/' \
| ldapdelete -v -w "$RENATERPASS" -D "$RENATERUSER" -H ldapi:///</pre>


&nbsp;
<syntaxhighlight lang="bash">
#Trouve et remplace $i et remplace le par $i@u-pec.fr
for i in $coupables; do
sed -i "s/${i}/${i}@u-pec.fr/g" /etc/postfix/blacklist_from
done


&nbsp;


&nbsp;
</syntaxhighlight>

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

Longueur et sélection d'une chaîne

Comme Bash permet d'avoir le résultat d'une commande externe facilement, on peut avoir accès à un nombre étonnament grand d'opérations diverses à faire pour manipuler des chaînes. On va se contenter ici des opération natives et laisserons de côté les expr, sed, grep...

Longueur

On peut avoir la longueur d'une chaîne avec la syntaxe ${#variable}:



BASH $> varNom="John O'Daly"<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${#varNom}<br data-attributes="class=%22mw_emptyline_first%22">11<br data-attributes="class=%22mw_emptyline_first%22">BASH $>

Position et longueur

On peut extraire un morceau de chaîne un peu à la manière de Python avec l'expression ${variable:position:[longueur]}. La longueur est optionnelle: si on ne la précise pas, l'extraction se fera jusqu'à la fin de la chaîne. La position de départ peut être négative, et dans ce cas l'extraction se fera à partir de la fin (comme en Python...).



BASH $> varNomFichier="20160405_ERR_application.log"<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier:9:15}<br data-attributes="class=%22mw_emptyline_first%22">ERR_application<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier:9}<br data-attributes="class=%22mw_emptyline_first%22">ERR_application.log<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier:(-4)}<br data-attributes="class=%22mw_emptyline_first%22">.log

Extraction de chaînes

En enlevant des caractères au début ou à la fin

Il est possible de supprimer à partir du début d'une chaîne la plus petite ${variable#critère} ou la plus grande ${variable##critère} occurrence d'un critère de recherche. L'utilisation du symbole joker * permet de faire la recherche sur une suite de caractère non définis.



BASH $> varNomFichier="20160405_ERR_application.log"<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier#20160405_}<br data-attributes="class=%22mw_emptyline_first%22">ERR_application.log<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier#*_}<br data-attributes="class=%22mw_emptyline_first%22">ERR_application.log<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier#*ERR_}<br data-attributes="class=%22mw_emptyline_first%22">application.log<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier##*_}<br data-attributes="class=%22mw_emptyline_first%22">application.log

Il est possible de supprimer à partir de la fin d'une chaîne la plus petite ${variable%critère} ou la plus grande ${variable%%critère} occurrence d'un critère de recherche. L'utilisation du symbole * permet de faire la recherche sur une suite de caractère non définis.

BASH $> varNomFichier="20160405_ERR_application.log"<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier%.log}<br data-attributes="class=%22mw_emptyline_first%22">20160405_ERR_application<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier%.*}<br data-attributes="class=%22mw_emptyline_first%22">20160405_ERR_application<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier%%_*}<br data-attributes="class=%22mw_emptyline_first%22">20160405<br data-attributes="class=%22mw_emptyline_first%22">BASH $><br data-attributes="class=%22mw_emptyline_first%22">

Recherche et remplacement

Remplacement basique d'une chaîne par une autre

On peut remplacer une ( ${/variable/recherche/remplace} ou plusieurs ( ${variable//recherche/remplace}) occurences d'une chaîne recherchée. Si on laisse vide la chaîne de remplacement, cela équivaut à la supprimer.



BASH $> varNomFichier="mon fichier save du jour.save"<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier/ /_}<br data-attributes="class=%22mw_emptyline_first%22">mon_fichier save du jour.save<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier// /_}<br data-attributes="class=%22mw_emptyline_first%22">mon_fichier_save_du_jour.save<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier//save/log}<br data-attributes="class=%22mw_emptyline_first%22">mon fichier log du jour.log<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier//save/}<br data-attributes="class=%22mw_emptyline_first%22">mon fichier du jour.<br data-attributes="class=%22mw_emptyline_first%22">BASH $>

Remplacement avancé

On peut aussi combiner les critères de recherches avec des expressions, des extractions en début ou en fin de chaîne; le critère de remplacement peut lui aussi être une expression.



BASH $> varNomFichier="mon fichier save du jour.save"<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier/m*r/20160809}<br data-attributes="class=%22mw_emptyline_first%22">20160809.save<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier/#*du/$(date +'%Y%m%d')}<br data-attributes="class=%22mw_emptyline_first%22">20160809 jour.save<br data-attributes="class=%22mw_emptyline_first%22">BASH $> echo ${varNomFichier/%save/log}<br data-attributes="class=%22mw_emptyline_first%22">mon fichier save du jour.log

Traitement avancé

comm - Comparer deux fichiers ligne à ligne

comm prend deux fichiers, qui doivent être triés et dans le même ordre. Il fait ensuite trois colonnes:

  • Elements spécifiques au fichier 1
  • Elements spécifiques au fichier 2
  • Elements communs

On peut ensuite supprimer des élements avec -1, -2, -3

[root@vigie differentielgroupes]# comm test1 test2                a                b<br data-attributes="class=%22mw_emptyline%22">bb                c                d<br data-attributes="class=%22mw_emptyline%22">comm: le fichier 1 n'est pas dans l'ordre attendu<br data-attributes="class=%22mw_emptyline_first%22">        dd<br data-attributes="class=%22mw_emptyline%22">comm: le fichier 2 n'est pas dans l'ordre attendu

La doc de Fred :)

# exemple de COMM pour traiter deux commandes, sans fabriquer de fichier intermédiaire.<ol><li>On notera qu’on utilise SORT à chaque fois.</li></ol><br data-attributes="class=%22mw_emptyline_first%22">comm -13 <( /root/dossiers-grenache/jplus 90 \          | cut -d ';' -f 1 \          | sort -t ';' -k 1,1b ) \         <( cat toutlemonde \          | sort -t ';' -k 1,1b )<br data-attributes="class=%22mw_emptyline_first%22"><br data-attributes="class=%22mw_emptyline%22"><ol><li>Autre Exemple. On a deux sources. On veut les synchroniser comme des mirroirs. On les compare avec COMM</li><li>et on fabrique des ADD puis des DEL.</li></ol><br data-attributes="class=%22mw_emptyline%22"><br data-attributes="class=%22mw_emptyline%22">echo ============ Connexion vers Renater : Dump LDAP<br data-attributes="class=%22mw_emptyline_first%22">ldap-csvexport.pl -H ldap://localhost -f mail=* -b ou=People,dc=upec,dc=local -q '' -s ';' -a uid \| sed 1d \| tr '|' "\n" \| sort -t ';' -k1,1b \<br data-attributes="class=%22mw_emptyline%22">> renater-ldap-dump.txt<br data-attributes="class=%22mw_emptyline_first%22">echo ============ Mise à jour du LDAP : ADD<br data-attributes="class=%22mw_emptyline_first%22">comm /etc/postfix/liste-dest renater-ldap-dump.txt -23 \| grep @ \| while read u ; do<br data-attributes="class=%22mw_emptyline%22">    echo "dn: uid=$u,ou=People,dc=upec,dc=local<br data-attributes="class=%22mw_emptyline%22">objectClass: person<br data-attributes="class=%22mw_emptyline%22">objectClass: organizationalPerson<br data-attributes="class=%22mw_emptyline%22">objectClass: inetOrgPerson<br data-attributes="class=%22mw_emptyline%22">sn: x<br data-attributes="class=%22mw_emptyline%22">cn: y<br data-attributes="class=%22mw_emptyline%22">mail: $u<br data-attributes="class=%22mw_emptyline%22">uid: $u<br data-attributes="class=%22mw_emptyline_first%22">"<br data-attributes="class=%22mw_emptyline%22">  done \| ldapadd -w "$RENATERPASS" -D "$RENATERUSER" -H ldapi:///<br data-attributes="class=%22mw_emptyline_first%22">echo ============ Mise à jour du LDAP : DEL<br data-attributes="class=%22mw_emptyline_first%22">comm /etc/postfix/liste-dest renater-ldap-dump.txt -13 \| grep @ \| sed -e 's/^/uid=/' -e 's/$/,ou=People,dc=upec,dc=local/' \| ldapdelete -v -w "$RENATERPASS" -D "$RENATERUSER" -H ldapi:///

cut

cut permet de couper des lignes en fonction d'un délimiteur que l'on lui donne :



 [root@gulliver ~]# cat /var/log/maillog | cut -d " " -f 1,2,3,4<br />May 12 09:52:29 gulliver
  • -d : le délimiteur choisi (ici un espace"
  • -f : les champs à afficher

sed

sed est un éditeur de flux. Il permet plusieurs choses, entre autres trouver et remplacer :

<syntaxhighlight lang="bash">

  1. Trouve et remplace $i et remplace le par $i@u-pec.fr

for i in $coupables; do sed -i "s/${i}/${i}@u-pec.fr/g" /etc/postfix/blacklist_from done


</syntaxhighlight>