Barra invertida não detectada no comando “grep”

0

Eu tenho uma consulta sql em um arquivo de texto e tem uma linha parecida com:

PARTITION BY (date_key // 100000000);

Agora, quero substituir as duas barras com a palavra "DIV".

Para isso, fiz o seguinte em um script de shell:

strg=$(grep "PARTITION BY" $entry)    ## $entry has the file_name
strg2=$(echo "$strg" | sed 's%\/\/%DIV%g')

Mas não funcionou como eu queria. Em outras investigações, fiquei sabendo que as barras ainda não foram descobertas.

echo "$strg"PARTITION BY (date_key ); Eu também tentei

printf ">%s<\n" "$strg" e

printf "%q\n" "$strg"

mas as saídas são:

>PARTITION BY (date_key );< e

PARTITION\ BY\ \(date_key\ \)\; , respectivamente.

Mas quando eu faço grep "PARTITION BY" <file_name> na linha de comando, recebo a saída correta:

PARTITION BY (date_key // 100000000); 

Alguém por favor pode apontar o que eu sinto falta?

    
por kskp 01.05.2017 / 19:53

1 resposta

2

grep detectará o // :

$ echo 'PARTITION BY (date_key // 100000000);' | grep '//'
PARTITION BY (date_key // 100000000);

sed irá substituí-los:

$ echo 'PARTITION BY (date_key // 100000000);' | sed 's%//%DIV%'
PARTITION BY (date_key DIV 100000000);

Para substituir // por DIV em cada linha que corresponda a PARTITION BY :

$ sed '/PARTITION BY/s%//%DIV%' filename
    
por 01.05.2017 / 21:20