![]() |
|
|
google unix.com
|
|||||||
| Forums | S'inscrire | Forum Rules | Liens | Albums | FAQ | Liste des membres | Calendrier | Recherche | Aujourd'hui, les postes | Marquer les forums comme lus |
| De programmation et de script Shell Posez vos questions à propos de KSH, CSH, SH, BASH, PERL, PHP, SED, awk et d'autres scripts shell et les langages de script shell ici. |
Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
|
||||
| Fil | Thread Starter | Forum | Réponses | Last Post |
| sed: match trouver et de supprimer la ligne ci-dessus | cstovall | De programmation et de script Shell | 3 | 07-02-2008 11:31 PM |
| Perl: Match d'une ligne avec plusieurs modes de recherche | Juha | De programmation et de script Shell | 10 | 04-09-2008 02:43 AM |
| Multiples en utilisant la ligne match sed | SiftinDotCom | De programmation et de script Shell | 15 | 03-28-2008 02:12 PM |
| lire et faire correspondre plusieurs lignes en perl | zx1106 | De programmation et de script Shell | 5 | 03-14-2008 10:21 PM |
| sed - remplacer la ligne qui contient le Pattern match avec une nouvelle ligne | kousikan | De programmation et de script Shell | 2 | 03-24-2007 07:24 AM |
![]() |
|
|
LinkBack | Thread Tools | Recherche sur ce Thread | Rate Thread | Modes d'affichage |
|
|
|
||||
|
Bonjour experts, Je suis débutant à perl, Tout simplement curieux de savoir comment effectuer les opérations suivantes dans perl. supposons que j ai un fichier txt comme ci-dessous. quand il fonde "* Main Start" Ensuite, allez à "* Principale Fin ,,,,,,,," patteren et de collecter le numéro de la ligne précédente de "* Principale Fin ,,,,,,," modèle. Dans mon cas, il est de 5. Puis commencez excuting normalement de la "* Main Start" position Voici la photo .. Je ne voulez pas créer de fichier temporaire aussi .. Fichier d'entrée: Code:
*Init End *Main Start *Comment Reset Timers 000000,0000,0,0,0,0,0,1,0 000000,0000,0,0,0,0,1,1,0 *Comment Control Frame at 1.04596 ms 000000,0400,0,0,0,0,1,0,1 2418A4,0000,0,1,3,0,0,0,0 049C00,0000,0,0,2,0,0,0,0 *Comment Control Frame at 1.04673 ms *Comment Control Frame at 000002,0000,0,0,0,0,1,0,1 241002,0000,0,1,3,0,0,0,0 000100,0000,0,0,2,0,0,0,0 *Comment Control Frame at 000004,0000,0,0,0,0,1,0,1 241002,0000,0,1,3,0,0,0,0 000000,0000,0,0,2,0,0,0,0 *Comment Frame 13 at ** us,,,,,,,, 000005,7E3D,0,0,0,0,1,0,1 *Main End,,,,,,,, sortie: Code:
*Init End *Main Start repeat(5); process all lines as usual here. ............ *Main End,,,,,,,,, J ai l'impression que toutes les lignes, il est quand il a trouvé une ligne commençant par *. C'est pourquoi je fais comme ci-dessous Code:
if(m/^\*/){
print "//", $_;
next;
}
Code:
Basic Algorithm of my programme need : 1. If "*Main Start" pattern found go to line where Pattern matches "*Main end". 2. Get the previous line. and get the value of the first field. 3. Return to "*Main start" position again. & Print repeat(that number) : in my case it is 5 : 4. stop/next; Toute aide appriciated plus .. observe, user_prady Dernière édition par user_prady; 03-28-2008 à 12:51 AM.. |
|
||||
|
N'est-il pas possible!
Citation:
Merci Dernière édition par user_prady; au 03.30.2008 11:07 AM.. |
|
||||
|
Ne dépendent pas de moi, j'ai besoin d'aller à mon poste de jour bientôt. Il ya un certain nombre de moyens pour ce faire, évidemment. L'ancienne variante serait de se souvenir de la ligne et les imprimer quand vous voyez que le terminateur. La réalité brute Perl approche serait de boire l'ensemble du dossier et de substituer le tout avec une chaîne vide, sauf la ligne avant le terminateur. Il ya une heure dans le Perl FAQ à ce sujet; perlfaq6 et faites défiler autour de questions connexes. (La question sur les commentaires C plus bas sur la page a quelques pistes, aussi.) Mais la "ligne" est tout à fait la solution la plus simple dans ce cas, si vous n'avez pas d'autres exigences. Code:
perl -ne 'BEGIN { $matching = 0; }
$matching = 1 if (m/^\*Main Start/);
next unless $matching;
print $prev if (defined $prev && m/^\*Main End/);
$prev = $_'
Vous ne savez pas de contrôle sur les flux que vous avez essayé de les décrire. Êtes-vous censé rappeler tout début de la principale jusqu'à la fin principale et imprimer que, après la sortie de la dernière ligne principale avant la fin? (Je suppose que c'est déjà comme un pseudo-code de mise en œuvre de ce qu'il faut. Mais alors, peut-être que je voudrais examiner une regex de substitution sur l'ensemble du fichier, ou de début de chaque section principale *, après tout.) Dernière édition par époque au 03.30.2008 07:22 AM.. Motif: Ajout d'un extrait de Perl pour se rappeler la ligne précédente |
|
||||
|
Citation:
|
|
||||
|
Je ne pense pas que j'ai capturé correctement à toutes vos exigences, mais au moins c'est un début. Si je suis autorisé à le deviner, ce qui serait plus facile de récupérer la sortie est dans une variable et de l'imprimer après avoir vu Fin * principale et imprimés de la ligne qui a immédiatement précédé.
|
|
||||
|
comment faire en perl
Citation:
J'essaie de faire de la follwoing perl Code:
nawk ' {
if($0 ~ /^\*Main Start/){
while( $0 !~ /^\*Main End/){
print $0;
getline;
}
}
} ' my.txt
Un code de plus je veux le faire en perl merci de me donner une idée comment le faire sans créer de fichiers temporaires .. Code:
TMP=/tmp/my_tmp$$
nawk '
/\*Main End/{
split(x,arr,",")
print "Loop " arr[1]
};
{x=$0
}
' my.txt > $TMP
nawk '{
if($0 ~ /^Loop/){
loop = $2
next;
}
if($0 ~ /^\*Main Start/){
printf "\nrepeat ("
print loop
} ' $TMP $my.txt
Merci & Regards, user_prady Dernière édition par user_prady; au 03.31.2008 02:48 AM.. |
![]() |
| Bookmarks |
| Tags |
| perl, perl regex, perl changement, regex, déplacement, changement perl, solaris |
| Thread Tools | Recherche sur ce Thread |
| Modes d'affichage | Rate this thread |
|
|