Por que não é esse simples script grep / sed funcionando [fechado]

0

Eu tenho uma variável com, entre outras, uma linha que se parece com isso

iBMC=277

Estou tentando combinar isso assim:

BMC="$(echo "$allnow" | grep iBMC=[0-9] | sed 's/iBMC=//g')"

Isso torna o BMC vazio. Aqui está o que parece em bash -x :

++ grep 'iBMC=[0-9] '
++ sed s/iBMC=//g
+ BMC=

Eu também tenho que combinar mais coisas, como nesta linha:

Name="$(echo "$allnow" | grep stringName= | sed 's/stringName=//g')"

Mas também está vazio. Aqui está o $allnow :

QQ1=0999999
QQ2=00aaaaa
RR=yes
GG=no
stringName=skolan8
sTitle=
iBMC=277
L3-cache="8 MB"
Minne="16 GB"    
    
por terdon 15.12.2015 / 09:39

4 respostas

1

Não é necessário usar um grep (talvez para problemas de desempenho em grandes informações, mas não acho que esse seja o caso com dados armazenados em uma variável)

BMC="$(echo "${allnow}" | sed -e '/iBMC=[0-9]/!d' -e 's/iBMC=//;q' )"
    
por 15.12.2015 / 10:15
1

Eu gosto da resposta do @NeronLeVelu, mas fico desconfiada quando vejo o mesmo ou quase o mesmo regex em dois lugares em um script sed . ;)

Com certeza, pode ser simplificado:

sed -n 's/iBMC=//;T;/^[0-9]/p'

Ou, se estiver usando o BSD sed , onde não há T , você pode usar a solução alternativa desleixada:

sed -n -e 's/iBMC=//;ta' -e 'b' -e ':a' -e '/^[0-9]/p'

Por outro lado, poderíamos simplificar a coisa toda:

sed -n 's/iBMC=\([0-9]\)//p'

que é exatamente o mesmo tamanho da minha primeira versão, mas portável para o BSD sed .

Portanto, envolva isso assim:

BMC="$(echo "$allnow" | sed -n 's/^iBMC=\([0-9]\)//p')"
Name="$(echo "$allnow" | sed -n 's/^stringName=//p')"
    
por 15.12.2015 / 11:25
1

O "espaço" após ] não era realmente um espaço, mas ¬† . Parecia o mesmo no BBEdit, mas depois de abri-lo com o HexFiend, ele me mostrou esse personagem. Existe algum atalho no BBEdit que faz ¬† em vez de espaço.

    
por 15.12.2015 / 14:38
0
<<IN \
grep '^iBMC=[0-9]\|^stringName=' |\
sed 's/^[[:lower:]]*//'
$allnow
IN

Você também pode querer verificar seu arquivo para fins de linha limpos, mas eu não sei sobre isso.

    
por 15.12.2015 / 10:44

Tags