← Back to team overview

sslug-teknik team mailing list archive

RE: Erstatte en linie med en anden i script

 

Tak til alle for feedback. Er næsten i mål med:

--------------------------------
#!/usr/local/bin/perl
$algo_level = @ARGV[0];
$algo = @ARGV[1];
$new = @ARGV[2];
#print "$new\n";
while (<STDIN>)
{
	unless
(/$algo_level\s+\d+\s+\"\w+\"\s+\"$algo\"/)
	{
		print $_;
    	    	next;
	}
	###
	print "$new\n";
	###
}
---------------------------------

Problemet for mig, er at erstatningsstrengen (argument 3) er af typen:
.L1TH 5 "apb" "C0805_BDY" 0 2 0 0 -15 20 0 0 0 0 0 0 0 0 0 0

Dvs. den indeholder " som er reserveret tegn. Erstatningsstrengen genereres i et bash script som kalder perl scriptet. Hvordan kan man i et bash script i en streng erstat " med \", således at perl scriptet kan forstå det??

Best Regards/Med venlig hilsen
Torben Andersen
-----Original Message-----
From: soeren.koch@xxxxxxxx [mailto:soeren.koch@xxxxxxxx]
Sent: 14. august 2008 12:25
To: sslug-teknik@xxxxxxxx
Subject: RE: [TEKNIK] Erstatte en linie med en anden i script

Ah ja, der skulle lige en next ind (da den ellers skriver erstatningslinien for alle linier og ikke kun for den du vil have)

Indrømmet, regular expressions kan ligne serbokroatisk (eller som jeg så i en signature på et tidspunkt:
"A suficiently advanced regular expression is indistingushable from line noise" :-)

Men har man først fået fat i hvordan de virker kan man ALT med tekstfiler! (sed og grep bruger også regexps intensivt)
Hvad angår anførselstegnet, så skal det bare escapes ( \" ) i regexpen så kan det matches som en normal karakter...

Her er en rettet version

#!/bin/perl
while (<STDIN>)
{
	unless (/\.L1TH\s+\d+\s+\"\w+\"\s+\"C0805_BDY/)
	{
		print $_;
		next;
	}
	###
 	print "Hvad der nu skal stå i stedet for den omtalte linie";
	###
}

Håber det hjælper

Søren Koch

> -----Original Message-----
> From: Torben Andersen [mailto:Torben.Andersen@xxxxxxxxxxxxxxxxxx]
> Sent: Thursday, August 14, 2008 11:41 AM
> To: sslug-teknik@xxxxxxxx
> Subject: RE: [TEKNIK] Erstatte en linie med en anden i script
>
> Tak til Søren for feedback.
>
> Jeg skal være ærlig at indrømme, at jeg er newbie. For mig er
> det skrevet på Serbokroatisk:-)
>
> Jeg har et problem med dit perl script: Den skal enten skrive
> linien intakt, eller hvis 1 ord er .L1TH og fjerde ord er
> "C0805_BDY" skal den skrive noget andet. Bemærk at fjerde ord
> er med anførselstegn, der nok er en reserveret karakter i Perl.
>
> Nogen råd - alt modtages med kyshånd:-)
>
> Best Regards/Med venlig hilsen
> Torben Andersen
>
> -----Original Message-----
> From: soeren.koch@xxxxxxxx [mailto:soeren.koch@xxxxxxxx]
> Sent: 14. august 2008 09:30
> To: sslug-teknik@xxxxxxxx
> Subject: RE: [TEKNIK] Erstatte en linie med en anden i script
>
> med perl kan du gøre sådan:
>
> lav en program (her kaldet test.pl)
>
> #!/bin/perl
> while (<STDIN>)
> {
> 	unless (/\.L1TH\s+\d+\s+\"\w+\"\s+\"C0805_BDY/)
> 	{
> 		print $_;
> 	}
> 	###
> 	print "Hvad der nu skal stå istedet";
> 	###
> }
>
> det du så gør er at skrive ./test.pl filnavn > nytfilnavn
> så kan du altid rename den nye fil til den gamle når du har
> checket at alt er i orden...
>
> det vigtige er at regexp'en virker ritigt (linien med
> unless), der kan du med fordel læse4 på perls manual ang regexp...
> (det skal understreges at der er andre måder at gøre det på også)
>
> Håber det virker.. :-)
>
> Søren Koch
>
> > -----Original Message-----
> > From: Torben Andersen [mailto:Torben.Andersen@xxxxxxxxxxxxxxxxxx]
> > Sent: Thursday, August 14, 2008 9:04 AM
> > To: sslug-teknik@xxxxxxxx
> > Subject: [TEKNIK] Erstatte en linie med en anden i script
> >
> > Hejsa,
> >
> > Har behov for et script på nogle gamle Solaris bokse, som kan
> > søge gennem en bestemt tekstfil, identificere en bestemt
> > linie og gemme den. Denne linie skal så erstatte den linie i
> > en anden fil, der opfylder samme betingelser.
> >
> > En linie kan f.eks. se ud som:
> >
> > .L1TH 5 "apb" "C0805_BDY" 0 2 0 0 -15 20 0 0 0 0 0 0 0 0 0 0
> > 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
> >
> > linien identificeres på .L1TH og C0805_BDY - dvs. 1. og 4. ord.
> >
> > Jeg har BASH, SED, AWK og PERL på maskinerne, men er selv
> > rimelig blank mht. brugen. Nogen råd??
> >
> > Best Regards/Med venlig hilsen
> > Torben Andersen
> > Production Engineer
> >
> > Flextronics
> > Special Business Solutions
> > Hjortevej 4
> > DK-7800 Skive
> > Denmark
> >
> > +45 96 14 30 00 main
> > +45 96 14 31 50 direct
> > +45 96 14 31 44 fax
> > +45 xx xx xx xx mobile
> >
> > http://www.flextronics.com
> >
> >
> > Legal Disclaimer:
> > The information contained in this message may be privileged
> > and confidential. It is intended to be read only by the
> > individual or entity to whom it is addressed or by their
> > designee. If the reader of this message is not the intended
> > recipient, you are on notice that any distribution of this
> > message, in any form, is strictly prohibited. If you have
> > received this message in error, please immediately notify the
> > sender and delete or destroy any copy of this message
> >
> >
> >
> >
>
>
>
> Legal Disclaimer:
> The information contained in this message may be privileged
> and confidential. It is intended to be read only by the
> individual or entity to whom it is addressed or by their
> designee. If the reader of this message is not the intended
> recipient, you are on notice that any distribution of this
> message, in any form, is strictly prohibited. If you have
> received this message in error, please immediately notify the
> sender and delete or destroy any copy of this message
>
>
>
>



Legal Disclaimer:
The information contained in this message may be privileged and confidential. It is intended to be read only by the individual or entity to whom it is addressed or by their designee. If the reader of this message is not the intended recipient, you are on notice that any distribution of this message, in any form, is strictly prohibited. If you have received this message in error, please immediately notify the sender and delete or destroy any copy of this message


Follow ups

References