Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/03/2008, 10h59   #1
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 546
Points : 7 779
Points : 7 779
Par défaut [sed] effacer les lignes 163 à [patern]-7

salut,

je cherche à faire un petit script sed qui utilisera un patern fourni en variable au shell script qui execute le sed :

le but du sed : effacer de la ligne 163 à la 7 ième ligne avant la premiere occurance du pattern recherché...

le but est global est en fait de découper un fichier pour eliminer des pages inutiles à l'édition papier. tout en gardant les pages d'entete générées par les lignes 0 à 163.... (format PS)

Code :
1
2
3
4
5
  2914  _DSC_SH 6.0 /Helvetica-I _DSC_FN 20.2 114.48 _DSC_MV (TVA pay\351e sur les d\351bits. Conform\351ment \340 nos conditions de vente. Marchandise vendue avec une clause de r\351serve de propri\351t\351.)_DSC_SH^M
  2915  _DSC_RS^M         <============= DEBUT de la premiere page à garder 
  2916  _DSC_RS^M
  2917  _DSC_SV^M
  2918  /Courier _DSC_L1 /Courier-I _DSC_LD^M
quand je modifie à la main je fait 163,2915d dans ce cas là
et le numero de facturation (le pattern) est à la ligne 2922 dans cet exemple.

J'espere que vous pourrez m'aider.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2008, 14h10   #2
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 946
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 946
Points : 1 085
Points : 1 085
Si tu n'arrives pas à faire ça en pur sed (ce qui n'est pas évident), utilise d'autres commandes :
Code :
1
2
line=$(grep -n "$pattern" file.ps | head -1 | sed 's/:.*//')
sed 163,$(($line - 7))d file.ps
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2008, 16h43   #3
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 546
Points : 7 779
Points : 7 779
c'est ce que j'ai fait mais avec un vi et quelques autres trucs autour en fait....
mais bon comme je suis en train de m'aguerrir sur les regexp l'usage de sed et vi je voulais tanter de faire un truc de la mort


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/bin/ksh
 
. /exploit/commun/cfg/env_exploit 
 
# automatiser la decoupe des fichiers de factures maritimes
# pour l'instant ne coupe que les factures et duplicatats precedent le numero de facture passe en parametre
# et ca imprimera donc a partir de la jusqu a la fin
 
# version 0.0  04/03/2008
 
# ne pas utiliser se script pour l'instant c'est encore un test merci
 
# le script prend 3 parametres 
# 1-nom du fichier PS
# 2-le numero de la facture
# 3-nom de l imprimante si il est present ca imprime dessus
 
# creer une fonction usage
usage()
{
        echo  
        echo USAGE : $0 FICHIER numero_facture imprimante\(facultative\)
        echo
}
 
# verifier le nombre de parametres (au moins 2)
if [ $# -lt 2 ] ; then
        mes_err "FATAL" $0 "le nombre de parametres est incorrect" "L execution a ete interrompu" "Analyser l incident"
        echo le nombre de parametres est incorrect L execution a ete interrompu Analyser l incident 
        usage
        exit 1
fi
 
# tester l existance du fichier
if [ ! -f $1 ]; then
        mes_err "FATAL" $0 "le fichier $1 n existe pas" "L execution a ete interrompu" "Analyser l incident"
        echo "FATAL $0 le fichier $1 n existe pas L execution a ete interrompu Analyser l incident"
        exit 1
fi
 
# tester l existance du numero de facture dans le fichier
if [ $(grep -i $2 $1 | wc -l) -eq 0 ] ; then
        mes_err "FATAL" $0 "le fichier $1 ne contient pas la facture #$2" "L execution a ete interrompu" "Analyser l incident"
        echo "FATAL $0 le fichier $1 ne contient pas la facture #$2 L execution a ete interrompu Analyser l incident"
        exit 1
fi
 
# genere un format de date pour permetre la creation d'un nom de fichier lisible
DATE=$(date +"%y%m%d")
 
#  calcul du numero de la ligne jusqu a laquelle il faut effacer depuis la 163
n_ligne=$(cat -n $1 | grep "_DSC_FN _DSC_BK 520.2 800.48 _DSC_MV ("$2")" | awk '{print $1}' | head -1)
n_ligne=$(($n_ligne-7)) 
 
echo  decoupage de la ligne 163 a la ligne $n_ligne
 
# copie du fichier 
cp $1 /tmp/$2-$DATE.ps
if [ $? -ne 0 ] ; then
        #  message d erreur
        mes_err "FATAL" $0 "la copie du fichier cp $1 /tmp/$2-$DATE.ps echoue" "L execution a ete interrompu" "Analyser l incident"
        echo "FATAL $0 la copie du fichier cp $1 /tmp/$2-$DATE.ps echoue L execution a ete interrompu Analyser l incident"
        exit 1
fi
 
# executer la decoupe
vi -c "163,"$n_ligne"d|:wq" /tmp/$2-$DATE.ps
if [ $? -ne 0 ] ; then
        #  message d erreur
        echo 
fi
 
#  tester la presence du parametre 3 
if [ $# -eq 3 ] ; then
        #  tester que l'imprimante existe
        if [ $((grep $3 /etc/printcap | wc -l)) -gt 0 ] ; then
                lpr -P $3 /tmp/$2-$DATE.ps
                if [ $? -ne 0 ] ; then
                        mes_err "FATAL" $0 "l edition de /tmp/$2-$DATE.ps n a pu s effectuer sur $3" "Merci de verifier le spoolex" "Analyser l incident"
                        echo "FATAL $0 l edition de /tmp/$2-$DATE.ps n a pu s effectuer sur $3 Merci de verifier le spoolex Analyser l incident"
                        exit 1
                fi
        fi
fi
 
#  deplacement du fichier genere dans les archives de factures maritimes
mv /tmp/$2-$DATE.ps /OA_div/prd/gp/gpgc/11.5.0/fic/SODIFRANCE/factures_maritimes/
if [ $? -ne 0 ] ; then
        #  message d erreur
        mes_err "FATAL" $0 "le deplacement du fichier mv /tmp/$2-$DATE.ps /OA_div/prd/gp/gpgc/11.5.0/fic/SODIFRANCE/factures_maritimes/ echoue" "L execution a ete interrompu" "Analyser l incident"
        echo "FATAL $0 le deplacement du fichier mv /tmp/$2-$DATE.ps /OA_div/prd/gp/gpgc/11.5.0/fic/SODIFRANCE/factures_maritimes/ echoue L execution a ete interrompu Analyser l incident"
        exit 1
fi
 
exit 0
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h26.


 
 
 
 
Partenaires

Hébergement Web