Como pesquisar uma variável [duplicada]

1

Eu tenho um cenário como

VAR = 'Some command brings the file path name and assigns it to VAR'

Por exemplo, o VAR pode ter valor como /root/user/samp.txt

Eu quero o comando grep como

grep HI $VAR 

Isto não funciona dá um erro dizendo que não é possível abrir /root/user/samp.txt mesmo erro quando tentou cat $ VAR.

Como lidar com isso?

Eu dei try

echo $VAR | grep HI
grep HI "$VAR"

Usando o shell korn

    
por Adr 04.03.2015 / 20:20

3 respostas

0

Eu sei que você pediu pelo grep, mas se eu entendi corretamente, você quer procurar a string de caminho por uma substring. Você pode usar apenas == ou =~ para isso, como em

[[ "$VAR" == *"HI"* ]]     # Does "$VAR" match <stuff>HI<stuff>?

ou

[[ "$VAR" =~ "HI" ]]       # Does "$VAR" contain HI?
    
por 04.03.2015 / 20:37
0

Eu tenho uma variável para a qual um caminho de um arquivo é atribuído por um comando,

por exemplo

VAR = grep /adr filename - assume que meu nome de arquivo tem uma linha como /adr/samp.txt

Então, quando eu faço echo de $ VAR, ele me dá o /adr/samp.txt, mas dá um erro para o cat $ VAR ou com o grep

Eu resolvi isso fazendo VAR = $ (nome do arquivo grep / adr). Então eu posso fazer o gato $ VAR.

Eu não sei o que está errado com ''

Obrigado Adr

    
por 04.03.2015 / 23:56
0

[[ "$VAR" =~ "HI" ]] answer do WAF aqui tem uma ótima solução bash / ksh que é provavelmente o que você está procurando, mas no caso de alguém estar procurando uma solução portátil, aqui está como fazer isso de forma nativa dentro de um shell POSIX simples (a base /bin/sh ):

[ "$VAR" != "${VAR#*HI}" ]

Tenha cuidado, sintaxe de padrões de shell (também conhecido como "globbing") é diferente da sintaxe de expressão regular POSIX.

Isso compara o valor de $VAR com a expansão do parâmetro ${VAR#*HI} , que implementa remoção de substring para remover qualquer coisa no início até a primeira instância de" HI "(dado VAR="OHIO" , ${VAR#*HI} seria remover o primeiro OHI e resultar em apenas O . VAR="Hi, I am bob" seria inalterado).

Devido à comparação != , o valor de retorno será verdadeiro ( 0 ) quando as duas cadeias forem diferentes (ou seja, "HI" em $VAR ) e falso ( 1 ) quando eles são iguais (ou seja, "HI" não existe em $VAR ).

    
por 06.03.2015 / 20:44