So verwenden Sie grep
oder ein anderes Tool, um einen bestimmten Wert in einer Ausgabe zu erhalten
In der folgenden Ausgabe muss ich den Wert 255.00
in der Zeile mitMinimum: 255.00 (1.0000)
Ein Muster wie:Channel Statistics:\s+Gray:\s+Minimum: +([\d.]+)
Image: test.tif
Format: TIFF (Tagged Image File Format)
Geometry: 2525x1785
Class: DirectClass
Type: bilevel
Depth: 1 bits-per-pixel component
Channel Depths:
Gray: 1 bits
Channel Statistics:
Gray:
Minimum: 255.00 (1.0000)
Maximum: 255.00 (1.0000)
Mean: 255.00 (1.0000)
Standard Deviation: 0.00 (0.0000)
Filesize: 581
Interlace: No
Orientation: Unknown
Background Color: white
Border Color: #DFDFDF
Matte Color: #BDBDBD
Antwort1
Mit Perl können Sie Folgendes tun. Es erfasst den numerischen Wert minimum:
innerhalb des Blocks Channel Statistics:
und druckt ihn aus:
perl -0 -ne '/Channel Statistics:\s+Gray:\s+Minimum:\h+([\d.]+)/ && print $1,"\n"' file
Ausgabe:(für gegebenes Beispiel)
255.00
Erläuterung:
-0 # specifies the input record separator. If there are no digits, the null character is the separator. The whole file is read in a single string.
-n # Iterate over the file
-e # execute the command line
Regulärer Ausdruck:
/ # regex delimiter
Channel Statistics: # literally
\s+ # 1 or more any kind of spaces
Gray: # literally
\s+ # 1 or more any kind of spaces
Minimum: # literally
\h+ # 1 or more horizontal spaces
( # start group 1
[\d.]+ # 1 or more digit or dot
) # end group
/ # regex delimiter
Antwort2
Mitsed
sed -rn 's/^\s+Minimum:\s+([0-9.]+).+$/\1/p' image.data
In Zeitlupe:
-r
sagtsed
, dass wir die erweiterte Regexp-"Syntax" verwenden-n
weist ansed
, nicht übereinstimmende Zeilen nicht zu druckens/^\s+Minimum:\s+([0-9.]+).+$/\1/
stimmt mit Ihrer Zielzeile überein und ersetzt sie durch den gewünschten Wert.p
weist an,sed
das Ergebnis auszudrucken
Wenn Sie zur Disambiguierung den Inhalt der vorherigen Zeilen berücksichtigen müssen, ist es nur geringfügig komplizierter:
sed -r ':a;N;$!ba; s/^.*Gray:\s*\n\s+Minimum:\s+([0-9.]+).+$/\1/' image.data
Wo:
:a;N;$!ba;
ist eine Schleife in dersed
Sprache, die die gesamte Datei auf einmal lädt-n
ist nicht mehr notwendig, da es keine anderen Zeilen gibt, die wir nicht drucken möchten- das Finale
p
ist auch nicht mehr notwendig, da wir nicht verwenden-n
Antwort3
Dies ist sehr simpel und geht davon aus, dass die Zeichenfolge „Minimum:“ in Ihrer Eingabe genau einmal vorkommt:
awk '/Minimum:/ {print $2}'