Perl: come indicare le righe che iniziano con "/"

Perl: come indicare le righe che iniziano con “/”

ho un file chiamato list.txt che sembra così: (ha oltre 500 righe)

/apps/gtool/0.7.5/gtool -M --g gen1.txt etc
/apps/gtool/0.7.5/gtool -M --g gen2.txt etc
/apps/gtool/0.7.5/gtool -M --g gen3.txt etc

voglio creare uno script .sh con ogni riga di list.txt. posso farlo in Perl ma ho un problema perché non so come indicare una linea che inizia con /

il mio script è il seguente:

use strict;
use warnings;

open (IN, "<list_for_merging_chunks.sh");
while (<IN>)
{
    if ($_=~ m/^/apps.*\n/)
    {
    my $file = $_;
    $file =~ s/.*\> //;
    $file =~ s/\.txt/.sh/;
    $file =~ s/\n//;
    open (OUT, ">$file");
    print OUT "\#!/bin/bash\n\#BSUB -J \"$file\"\n\#BSUB -o 
/scratch/home/\n\#BSUB -e /scratch/home/$file\.out\n#BSUB -n 1\n\#BSUB -q 
normal\n\#BSUB -P DBCDOBZAK\n\#BSUB -W 168:00\n";
    print OUT $_;
    close OUT;
    }

}

exit;

ho un errore:

Bareword found where operator expected at merging_chunks.pl line 7, near "*\n"
    (Missing operator before n?)
"my" variable $file masks earlier declaration in same statement at 
merging_chunks.pl line 10.
"my" variable $file masks earlier declaration in same scope at 
merging_chunks.pl line 11.
"my" variable $file masks earlier declaration in same scope at 
merging_chunks.pl line 12.
"my" variable $file masks earlier declaration in same scope at 
merging_chunks.pl line 14.
"my" variable $file masks earlier declaration in same scope at 
merging_chunks.pl line 15.
"my" variable $file masks earlier declaration in same statement at 
merging_chunks.pl line 15.
"my" variable $file masks earlier declaration in same statement at 
merging_chunks.pl line 15.
"my" variable $_ masks earlier declaration in same scope at merging_chunks.pl 
line 16.
syntax error at merging_chunks.pl line 7, near "*\n"
syntax error at merging_chunks.pl line 20, near "}"
Execution of merging_chunks.pl aborted due to compilation errors.

penso che questo sia a che fare con questo file: if ($_=~ m/^/apps.*\n/) Non sembra come il fatto che inizia con un /. c’è comunque posso aggirare questo? sto assumendo che ci sia un carattere speciale che potrei usare per raccontare Perl in qualche modo? molte grazie.

EN From: Perl: how to designate rows starting with “/”

More similar articles:

2 Comments

  1. modificare il delimitatore regexpr da un carattere non utilizzato all’interno del regexpr. in questo esempio, uso il ! invece di /:

    $_=~ m!^/apps.*\n!

    o considera il / carattere:

    $_ =~ m/^\/apps.*\n/
  2. è possibile escape meta caratteri in espressioni regolari con una barra nera.

    m/^\/apps.*\n/

    è inoltre possibile modificare il delimitatore della corrispondenza modello come questo.

    m{^/apps.*\n}

    ti sembra di sapere che, come hai già fatto nella stringa doppia citato più avanti nel vostro codice.

    si noti che non è necessario il $_ =~ parte se si opera su $_. se si utilizza m// è implicito essere su $_.

Leave a Reply

Your email address will not be published. Required fields are marked *