Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1412 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  cat, sed et pipe sont dans un bateau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

cat, sed et pipe sont dans un bateau

n°1280388
Joy4Ever
Posté le 01-06-2011 à 11:30:03  profilanswer
 

Bonjour à tous,
 
Dans le cadre de ma formation, on a un projet en bash à faire, rien de bien méchant normalement mais je rencontre quelques petits problèmes avec : cat et sed.
 
L'idée de la commande c'est d'ajouter un user4 à la ligne d'un fichier dont la syntaxe est la suivante
 
pc:user1:user2:user3
 
Pour le moment j'ai fait ça :
 

echo "Veuillez entrer la machine"
    read varmachine
    echo "Veuillez entrer l'utilisateur à qui accorder les droits sur la machine"
    read varuser
    cat hosts | sed -e 's/\(^$varmachine:.*\)/\1$varuser/g' > hosts_tmp
    mv hosts_tmp hosts


 
Autant le cat | sed fonctionne quand je suis sur le terminal autant dans le script, pas du tout.
 
Je m'en remets à vous,  
 
si vous avez une idée..
 
Merci d'avance

mood
Publicité
Posté le 01-06-2011 à 11:30:03  profilanswer
 

n°1280621
twocats
Posté le 02-06-2011 à 00:53:44  profilanswer
 

Useless use of cat de toute façon. Je suis pas doué avec sed, mais avec awk on peut faire ça :

awk '$1 ~ /^'$varmachine'/ {print $0 ":" "'$varuser'"}' hosts > hosts_tmp


---------------
La réponse est 42
n°1280645
Joy4Ever
Posté le 02-06-2011 à 10:49:30  profilanswer
 

Merci, je vais creuser de ce coté là

n°1280647
[Albator]
MDK un jour, MDK toujours !
Posté le 02-06-2011 à 11:12:14  profilanswer
 

Avec sed ça donnerait ça
sed -i hosts -e "s/^\($varmachine:.*\)/\1$varuser/"  
 
Ce qui ne marche pas chez toi:
1) tu utilises des simple quote (apostrophe) au lieu de double quote (guillemets), ce qui empeche la substitution des variables par leur valeurs.
2) le chapeau chinois ^ ne doit pas faire partie du \( \) de l'esxpression sed. ça me surprend que tu dises que ça marche chez toi.
3) utiliser "-i" de sed permet de modifier directement dans le fichier, sans passer par un fichier temporaire.

Message cité 1 fois
Message édité par [Albator] le 02-06-2011 à 11:15:26
n°1280650
Joy4Ever
Posté le 02-06-2011 à 11:39:52  profilanswer
 

Merci merci merci!

n°1280772
fighting_f​alcon
Posté le 03-06-2011 à 12:11:29  profilanswer
 

[Albator] a écrit :

2) le chapeau chinois ^ ne doit pas faire partie du \( \) de l'esxpression sed. ça me surprend que tu dises que ça marche chez toi.

 

:heink:
et pourquoi ça ?

 

L'accent circonflexe (en bonne grammaire française), signifie "début de ligne" ...
Et d'ailleurs le \(...\) n'est pas l'expression sed mais un groupe que l'on souhaite capturer pour utiliser dans la 2ème partie de la commande sed
Je ne vois vraiment pas ce qui empêche d'utiliser le marqueur de début de ligne dans un groupe ...


Message édité par fighting_falcon le 03-06-2011 à 12:11:53

---------------
[mon feed]
n°1281666
Joy4Ever
Posté le 10-06-2011 à 21:57:17  profilanswer
 

Votre aide m'a bien aidé mais je me retrouve confronté à un autre problème :

 

J'ai un fichier à la syntaxe suivante :

 

pc:toto:titi
linux:titi:toto:tata

 

et j'aimerais supprimer toto de la deuxième ligne. En fait, dans mon script le premier champ est entré en paramètre. Le problème  est que je n'arrive pas à trouver la commande sed pour supprimer toto dans la deuxième ligne uniquement (et donc garder les autres lignes intactes)

 

J'ai commencé par des trucs comme ça :

 

sed -e "s/^\<$2\>:[a-zA-Z\<$3\>]*"

 

$2 c'est linux et $3 toto.

 

Merci d'avance pour votre aide


Message édité par Joy4Ever le 10-06-2011 à 21:58:24
n°1281668
twocats
Posté le 10-06-2011 à 22:35:16  profilanswer
 

awk '/^linux/ {sub(/toto:/, "" ); print}' fichier > autre_fichier


Message édité par twocats le 11-06-2011 à 00:20:23

---------------
La réponse est 42
n°1281674
Joy4Ever
Posté le 10-06-2011 à 23:11:02  profilanswer
 

Je vais essayer ça! merci beaucoup!

n°1281691
fighting_f​alcon
Posté le 11-06-2011 à 09:29:29  profilanswer
 

sed -e '/linux/ s/toto://'
 
donc avec tes variables, ça donne :
sed -e "/$2/ s/$3://"


---------------
[mon feed]

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  cat, sed et pipe sont dans un bateau

 

Sujets relatifs
Utilisation d'un pipe sous SCO OSsudo, apache et pam.d sont sur un bateau
[SNMP - TRAP] broken pipe !!!find, grep et le pipe
[SHELL] help, probleme de pipeSamba et office sont dans un bateau...
[shell] script appellé par un pipe, stocker la donnée d'entrée?Récupèrer la valeur passée dans le pipe avec un script shell
PDF, PS, PNG sont dans un bateau... Comment les convertir ?[appli son qui accepte pipe]
Plus de sujets relatifs à : cat, sed et pipe sont dans un bateau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR