Recherche d'une valeur absolut et non relativ

Fermé
bheadman Messages postés 105 Date d'inscription samedi 1 septembre 2007 Statut Membre Dernière intervention 17 septembre 2008 - 7 juil. 2008 à 13:19
bheadman Messages postés 105 Date d'inscription samedi 1 septembre 2007 Statut Membre Dernière intervention 17 septembre 2008 - 9 juil. 2008 à 10:06
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)

2 réponses

dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
7 juil. 2008 à 15:33
dans /etc/passwd rechercher ^ndupont: pour ne trouver que l'utilisateur ndupont
je n'ai pas bien compris le format du 2ème fichier
0
bheadman Messages postés 105 Date d'inscription samedi 1 septembre 2007 Statut Membre Dernière intervention 17 septembre 2008
9 juil. 2008 à 10:06
le 2ème fichier la sytaxe est la suivante :
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
7 juil. 2008 à 20:54
Salut,

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]$

0
bheadman Messages postés 105 Date d'inscription samedi 1 septembre 2007 Statut Membre Dernière intervention 17 septembre 2008
9 juil. 2008 à 10:03
Merci,

C'est plus "propre" que ma version qui ressemble à cela :

sed '/ ^ '"${User}"' : /d' ${File_Login}/passwd > ${File_Login}/passwd_temp

qui consiste à ne demander que les regexp en début de ligne et qui sont immédiatement suivit de 2 point
0