O resultado do grep não pode ser armazenado na variável

0

Eu quero obter uma data de um nome de arquivo. Isso funciona usando este código:

for filename in OH/*
do
    echo $filename |grep -Eo '[[:digit:]]{14}'
done;

Agora eu quero salvar o resultado em uma variável como esta:

for filename in OH/*
do
    result=$($filename |grep -Eo '[[:digit:]]{14}')
    echo $result
done;

Mas eu recebo 2 linhas vazias impressas. O que eu estou perdendo ai?

    
por LaaKii 02.02.2018 / 11:19

2 respostas

3

Você descartou o echo :

for filename in OH/*
do
    result=$(echo $filename | grep -Eo '[[:digit:]]{14}')
    echo "$result"
done;

ou melhor ainda ,

for filename in OH/*
do
    result=$(printf %s "$filename" |grep -Eo '[[:digit:]]{14}')
    echo "$result"
done;

ou

for filename in OH/*
do
    result=$(grep -Eo '[[:digit:]]{14}' <<<"$filename")
    echo "$result"
done;
    
por 02.02.2018 / 11:26
0

Você está faltando e ecoa dentro da expansão de execução do comando, mas é melhor usar o printf:

result=$(echo "$filename" | grep -Eo '[[:digit:]]{14}')

result=$(printf '%s' "$filename" | grep -Eo '[[:digit:]]{14}')

Claro, há a chance de que o resultado seja NULL se o arquivo não corresponder ao grep regex, para isso precisamos de um teste:

#!/bin/bash 
for filename in OH/*
do
    result=$(printf '%s' "$filename" | grep -Eo '[[:digit:]]{14}')
    [ "$result" ] && echo "$result"
done;
    
por 02.02.2018 / 20:20