Bonjour,
Je bute sur un truc sans-doute tout bête
Le contexte:
Zim (wiki de bureau) utilise des fichier.txt
qui permettent la création de Tâches — ligne débutant par une case à cocher — de la façon suivante :
[ ] libellé de l'action à accomplir
ces cases peuvent également être cochées, annulées, transférées (respectivement : [*] ; [x] ; [>] )
d'autre part Zim permet aussi de créer des étiquettes suivant le format : @exemple (1mot)
ces étiquettes permettent de filtrer les Tâches par catégories.
Mon problème
La commande :
find /chemin/ -type f -name "*.txt" -exec sed -i 's/^\[ \]/\[>\]/g' '{}' \;
permet de modifier dans l'arborescence sous-jacente à /chemin/ toutes les lignes des fichiers .txt
[ ] libellé de l'action à accomplir
en
[>] libellé de l'action à accomplir
ce que je veux => ne modifier parmi ces lignes uniquement celles qui contiennent le motif @next
la solution doit être un simple grep @next
mais je ne connais pas la règle de "grammaire" pour cela dans ce contexte.
Merci pour vos suggestions et explications .
Script Bash : grep + sed Le sujet est résolu
- dezix
- Membre hyper actif
- Messages : 3546
- Inscription : 04 juin 2016, 14:50
- Status : Hors-ligne
La solution :
Une fonction de filtrage équivalente à grep est incluse dans SED
sed '/<chain3>/s/<chain1>/<chain2>/'
permet de remplacer <chain1> par <chain2> uniquement pour les lignes contenant <chain3>
Dans l'exemple de #1 ça donne :
find /chemin/ -type f -name "*.txt" -exec sed -i '/@next/s/^\[ \]/\[>\]/g' '{}' \;
tout simplement.
Merci SED !
Une fonction de filtrage équivalente à grep est incluse dans SED
sed '/<chain3>/s/<chain1>/<chain2>/'
permet de remplacer <chain1> par <chain2> uniquement pour les lignes contenant <chain3>
Dans l'exemple de #1 ça donne :
find /chemin/ -type f -name "*.txt" -exec sed -i '/@next/s/^\[ \]/\[>\]/g' '{}' \;
tout simplement.
Merci SED !
**Simple Utilisateur** -- Debian stable - XFCE
- vv222
- Membre actif
- Messages : 852
- Inscription : 18 avr. 2016, 20:14
- Contact :
- Status : Hors-ligne
Oh, merci pour le partage !
Je ne connaissais pas cette possibilité de sed, dans ces situations j'utilisais jusqu'ici quasi systématiquement awk.
- lol
- Site Admin
- Messages : 4979
- Inscription : 04 avr. 2016, 12:11
- Localisation : Madagascar
- Status : Hors-ligne
ET tu partage la solution. Magnifique!
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
- dezix
- Membre hyper actif
- Messages : 3546
- Inscription : 04 juin 2016, 14:50
- Status : Hors-ligne