Das Ziel: Lesen Sie jede Zeile, extrahieren Sie Informationen per Regex und geben Sie sie an das Bash-Skript zurück
Das Problem: Wenn die gesamte Datei eine Zeichenfolge im Perl-Code ist, funktioniert sie. Wenn sie jedoch Zeile für Zeile über Bash angegeben wird, findet sie nichts.
Die Bash-Seite:
while IFS= read -r line
do
RESULT=$(perl /mnt/c/LINUX_STUFF/regex.pl $line)
echo $RESULT
done < example.config
Die Perl-Seite:
use strict;
my $str = $ARGV[0];
my $regex = qr/(^\S*) = (\S*)/mp;
if ( $str =~ /$regex/g ) {
print "$2";
}
Die example.config:
[ORACLE]
ORACLE_BASE = /u01/oracle
ORACLE_HOME = $ORACLE_BASE/12.1.0.2
ORACLE_SID = asi1
[ORACLE]
[FTP]
FILE1 = $DUMPFILE.dmp
FILE2 = $DUMPFILE.dmp.gz
FILE3 = $DUMPFILE.md5
[FTP]
Wie Sie hier sehen können, sollte es funktionieren: https://regex101.com/r/KlCyVE/9
Das liegt daran example.config
, dass die Zeilen Leerzeichen enthalten, sodass das Perl-Skript nur das erste Wort aus jeder Zeile sieht $ARGV[0]
.
Dies sollte das Problem beheben:
use strict;
my $str = join(" ", @ARGV); #THIS
my $regex = qr/(^\S*) = (\S*)/mp;
if ( $str =~ /$regex/g ) {
print "$2";
}
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen