[ sed ] passer un substitute de vi vers sed

passer un substitute de vi vers sed [ sed ] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 12-11-2004 à 00:14:54    

voila je voudrai par exemple editer le fichier /etc/services et recupere  le port d'un service préciser sur la sortie standard
dans vi j'ai reussi a l'aide de %s/// de faire ce que je veux sur la ligne mais en passant a sed j'y arrive pas afficehr le resultat de la meme expression
 

Citation :

$cat /etc/services | sed -e s/^ssh.*\([0-9]\{2,\}\).tcp.*$/\1

 
 le s//\1 est tout droit sorti de vi mais j'ai ca comme erreur
 

Citation :

sed: -e expression n°1, caractère 28: Commande `s' inachevée


 
et aussi je sais que -i permet de spécifier un fichier, rendant le cat inutile
 
merci d'avance

Reply

Marsh Posté le 12-11-2004 à 00:14:54   

Reply

Marsh Posté le 12-11-2004 à 06:24:44    

je lis :
dans vi j'ai reussi a l'aide de %s/// de faire ce que je veux
 
et je lis :
s/^ssh.*\([0-9]\{2,\}\).tcp.*$/\1
 
pourquoi tu termine pas la commande? "s///"
il te manque un / non ? ( idée : a la fin de la ligne par exemple )

Reply

Marsh Posté le 12-11-2004 à 11:47:41    

heu j'avoue que c'est vraiment pas bete.. auto-flagellation pour moi !!
n'empeche que ca marche toujours pas il ne m'affiche aucun changement sur la ligne.. j'essaye avec un fichier ne contenant que la ligne, mais rien n'y fait je n'arrive pas a avoir juste 22 en sortie...

Reply

Marsh Posté le 12-11-2004 à 13:03:48    

#! /bin/sh
cat /etc/services | grep $1 | cut -f3 | cut -d "/" -f1
 
un script sed est possible si tu veux vraiment mais ces $&ùé"é de tab sont dérangeants.

Reply

Marsh Posté le 12-11-2004 à 13:38:23    

wai ta soluce est pas mal mais bon c'est pas drole a faire alors que y'a un moyen de tout farie avec une expression reguliere et un sed...
ps. j'avais deja demander de l'aide pour le meme exemple et on m'avais donné une réponse similaire a la tienne mais la j'essaye de bien comprendre les regexp
voila ce que j'ai pour l'instant  

Citation :

sed -e 's#^ssh.*\([0-9]\{2,\}\).*tcp.*$#\1#' /etc/services


 
m'affiche tout le fichier /etc/services mais change la ligne :
ssh         22/tcp          # ssh login  
 en
22
 
mais par contre je ne sais si il est possible d'avoir en sortie seulement la ou les ligne modifiées


Message édité par tuxy_co_psylo le 12-11-2004 à 14:14:12
Reply

Marsh Posté le 12-11-2004 à 16:19:37    

c'est bon j'ai trouvé: option -n avec /p comme flag ca donne
 

Citation :


$sed -n -e 's/^ssh.*\([0-9]\{2,\}\).*tcp.*$/\1/p' /etc/services
 
22

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed