![grep ou outro regexp para obter o valor da saída](https://rvso.com/image/1576007/grep%20ou%20outro%20regexp%20para%20obter%20o%20valor%20da%20sa%C3%ADda.png)
Como usar grep
ou qualquer outra ferramenta para obter um valor específico em uma saída
Na saída abaixo, preciso obter o valor 255.00
na linha comMinimum: 255.00 (1.0000)
Um padrão como: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
Responder1
Usando perl, você pode fazer o seguinte. Ele captura o valor numérico minimum:
dentro do bloco Channel Statistics:
e o imprime:
perl -0 -ne '/Channel Statistics:\s+Gray:\s+Minimum:\h+([\d.]+)/ && print $1,"\n"' file
Saída:(por exemplo dado)
255.00
Explicação:
-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
Regex:
/ # 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
Responder2
Comsed
sed -rn 's/^\s+Minimum:\s+([0-9.]+).+$/\1/p' image.data
Em câmera lenta:
-r
dizsed
que usamos a "sintaxe" do regexp estendido-n
dizsed
para não imprimir linhas não correspondentess/^\s+Minimum:\s+([0-9.]+).+$/\1/
corresponde à sua linha de destino e a substitui apenas pelo valor que você procurap
dizsed
para imprimir o resultado
Se precisar desambiguar tendo em conta o conteúdo das linhas anteriores, é apenas um pouco mais complicado:
sed -r ':a;N;$!ba; s/^.*Gray:\s*\n\s+Minimum:\s+([0-9.]+).+$/\1/' image.data
onde:
:a;N;$!ba;
é um loop nased
linguagem que carrega o arquivo inteiro de uma vez-n
não é mais necessário, pois não há outras linhas que não queiramos imprimir- o final
p
também não é mais necessário, pois não usamos-n
Responder3
Isso é muito simplista, assumindo que a string 'Minimum:' ocorre exatamente uma vez na sua entrada:
awk '/Minimum:/ {print $2}'