Por que o mesmo regex do sed (após o grep) falha quando executado em um script bash vs linha de comando bash?

1

Aqui está o script. É bem sucedido quando eu o executo a partir do prompt BASH , mas não no script. Alguma idéia?

Quando digo "falha", quero dizer que sed regex não corresponde a nada, portanto, não há texto substituído. Quando eu o executo na linha de comando, ele corresponde.

Além disso, posso ter uma resposta para isso. Tem a ver com meu grep alias e GREP_OPTIONS tendo uma interação estranha. Vou postar de volta com os detalhes sobre isso.

#!/bin/bash

for ((x = 101; x <= 110; x++)); do
    urls="${urls} www$x.site.com/config"
done;

curl -s ${urls} | grep -i "Git Commit" | sed -r "s/.*Git Commit<\/td><td>([^<]+).*//g"
    
por kghastie 10.07.2014 / 16:47

1 resposta

2

Eu realmente consegui descobrir isso, e acho que adicionaria aqui o próximo googler que bate com a cabeça na mesma parede.

Eu tinha um alias grep e GREP_OPTIONS set. Isso fez com que o realce de cor permanecesse no script, mesmo quando ele estivesse passando para outro comando. Isso geralmente não funciona muito bem com sed .

Aqui estão minhas .alias e opções:

alias grep='grep -i --color'
export GREP_OPTIONS="--color=always"

Portanto, ao executar a partir do script, ele não usa o comando com alias e, portanto, força a cor a estar sempre ativa. Então, quando eu chequei meu alias e vi a opção --color (que significa auto , que significa "não cor saída que é canalizada para outro comando" (como sed ).

Eu estava confuso porque esqueci que tinha definido GREP_OPTIONS , então eu esperava que o grep no script tivesse color definido como auto por padrão (como seria se eu não tivesse definido o% globalGREP_OPTIONS). Mas não é assim.

Aqui estão as minhas novas configurações (acredito que o sinal --color to GREP_OPTIONS seja redundante, mas deixo isso como um lembrete):

alias grep='grep --color=always'
export GREP_OPTIONS="--ignore-case --color"

Dessa forma, sempre que eu estiver na linha de comando, terei destaque para todos os meus greps (que geralmente é o que eu quero). Mas nos scripts, o padrão será colorir apenas quando não for canalizado para outro comando. Eu ainda terei que adicionar --color = sempre a muitos dos meus scripts (já que eu prefiro destacar na maioria dos casos, mesmo quando estou passando para outro comando, a menos que eu nunca veja a saída).

    
por 11.07.2014 / 21:37