Recherche d'une valeur absolut et non relativ
bheadman
Messages postés
105
Statut
Membre
-
bheadman Messages postés 105 Statut Membre -
bheadman Messages postés 105 Statut Membre -
Bonjour,
Bon pour commencer ce que j'entends par valeur absolu/relative
Absolu :
Si je cherche toto dans un fichier je veux trouver "toto" et pas les ligne "toto32" "totomobile" "*toto*"
relative :
l'inverse de au-dessus :D
Donc voila le but de la maneuvre est de supprimer des users dans /etc/passwd ainsi que dans un autre fichier utilisant le même "login" (si passwd contiens ndupont:x:.... l'autre fichier contiens ndupont|info1|info2|...).
Mais le problème c'est que ces fichiers contiennent des "doublons renommés" :
si "ndupont" existe en double alors le 2ème s'appelle "ndupont2" (exemple : nicolas dupont et natalie dupont = ndupont).
Donc si je veux supprimer ndupont et pas ndupont2 je suis bloqué.
voici mon script actuellement :
# cat supp.sh
#!/bin/sh
####
# Definition des variables
####
User_Liste=`cat ./liste.txt`
Now=`date +%y%m%d-%H%M`
####
#Sauvegarde des fichier d'origine pour archivage
####
cp -f /Nicolas_test/passwd /Nicolas_test/passwd.bak.${Now}
cp -f /Nicolas_test/aut_base /Nicolas_test/aut_base.bak.${Now}
####
# Debut de la suppression des compte
####
for User in ${User_Liste}
do
sed '/'"${User}"':/d' /Nicolas_test/passwd > /Nicolas_test/passwd_temp
sed '/'"${User}"'\|/d' /Nicolas_test/aut_base > /Nicolas_test/aut_base_temp
mv -f /Nicolas_test/passwd_temp /Nicolas_test/passwd
mv -f /Nicolas_test/aut_base_temp /Nicolas_test/aut_base
done
####
#fin
####
Pour info je suis bloqué sur un vieux système unix et je n'ai que du "sh" sous la main. (pour exemple le sed que j'utilise ne connais même pas l'option "-i" ce qui m'oblige à faire tout ce mic-mac de fichier temp et de copie)
Je suis ouvert à toute proposition et reste à votre disposition en cas de question.
Cordialement.
BHeaDMaN (Nicolas :D)
Bon pour commencer ce que j'entends par valeur absolu/relative
Absolu :
Si je cherche toto dans un fichier je veux trouver "toto" et pas les ligne "toto32" "totomobile" "*toto*"
relative :
l'inverse de au-dessus :D
Donc voila le but de la maneuvre est de supprimer des users dans /etc/passwd ainsi que dans un autre fichier utilisant le même "login" (si passwd contiens ndupont:x:.... l'autre fichier contiens ndupont|info1|info2|...).
Mais le problème c'est que ces fichiers contiennent des "doublons renommés" :
si "ndupont" existe en double alors le 2ème s'appelle "ndupont2" (exemple : nicolas dupont et natalie dupont = ndupont).
Donc si je veux supprimer ndupont et pas ndupont2 je suis bloqué.
voici mon script actuellement :
# cat supp.sh
#!/bin/sh
####
# Definition des variables
####
User_Liste=`cat ./liste.txt`
Now=`date +%y%m%d-%H%M`
####
#Sauvegarde des fichier d'origine pour archivage
####
cp -f /Nicolas_test/passwd /Nicolas_test/passwd.bak.${Now}
cp -f /Nicolas_test/aut_base /Nicolas_test/aut_base.bak.${Now}
####
# Debut de la suppression des compte
####
for User in ${User_Liste}
do
sed '/'"${User}"':/d' /Nicolas_test/passwd > /Nicolas_test/passwd_temp
sed '/'"${User}"'\|/d' /Nicolas_test/aut_base > /Nicolas_test/aut_base_temp
mv -f /Nicolas_test/passwd_temp /Nicolas_test/passwd
mv -f /Nicolas_test/aut_base_temp /Nicolas_test/aut_base
done
####
#fin
####
Pour info je suis bloqué sur un vieux système unix et je n'ai que du "sh" sous la main. (pour exemple le sed que j'utilise ne connais même pas l'option "-i" ce qui m'oblige à faire tout ce mic-mac de fichier temp et de copie)
Je suis ouvert à toute proposition et reste à votre disposition en cas de question.
Cordialement.
BHeaDMaN (Nicolas :D)
Configuration: Windows XP Firefox 3.0
A voir également:
- Recherche d'une valeur absolut et non relativ
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Recherche et remplacer word - Guide
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Je recherche une chanson - Guide
2 réponses
Salut,
Il te faut regarder du côté des expressions régulières matchant une limite de mots (man grep) :
Il te faut regarder du côté des expressions régulières matchant une limite de mots (man grep) :
[tmpfs]$ cat fichier.txt ndupont:x:501:501:blabla:bla:/bin/bash ndupont2:x:501:501:blabla:bla:/bin/bash nbondupont:x:501:501:blabla:bla:/bin/bash ndupontel:x:501:501:blabla:bla:/bin/bash ndupont3:x:501:501:blabla:bla:/bin/bash [tmpfs]$ grep 'ndupont' fichier.txt ndupont:x:501:501:blabla:bla:/bin/bash ndupont2:x:501:501:blabla:bla:/bin/bash nbondupont:x:501:501:blabla:bla:/bin/bash ndupontel:x:501:501:blabla:bla:/bin/bash ndupont3:x:501:501:blabla:bla:/bin/bash [tmpfs]$ grep 'ndupont\b' fichier.txt ndupont:x:501:501:blabla:bla:/bin/bash nbondupont:x:501:501:blabla:bla:/bin/bash [tmpfs]$ grep '\bndupont\b' fichier.txt ndupont:x:501:501:blabla:bla:/bin/bash [tmpfs]$sed utilise la même syntaxe, par contre il faut voir en fonction de la version...
[tmpfs]$ sed -n '/ndupont/p' fichier.txt ndupont:x:501:501:blabla:bla:/bin/bash ndupont2:x:501:501:blabla:bla:/bin/bash nbondupont:x:501:501:blabla:bla:/bin/bash ndupontel:x:501:501:blabla:bla:/bin/bash ndupont3:x:501:501:blabla:bla:/bin/bash [tmpfs]$ sed -n '/ndupont\b/p' fichier.txt ndupont:x:501:501:blabla:bla:/bin/bash nbondupont:x:501:501:blabla:bla:/bin/bash [tmpfs]$ sed -n '/\bndupont\b/p' fichier.txt ndupont:x:501:501:blabla:bla:/bin/bash [tmpfs]$
ndupont|local|nom_server|base
Avec un pipe " | " comme séparateur et je le protège avec un "\" pour qu"il ne soit pas interprété mais pris en compte comme un simple caratère