A substituição de um endereço IP por sed resulta em: sed: -e expressão # 1, char 57: Unmatched (ou \ (

0
sed -e 's/\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\.)\(.*\)/ANONYMOUS/p' $IPLOG

Estou tentando substituir o ip addr de $ IPLOG para ANONYMOUS, mas estou recebendo este erro

sed: -e expression #1, char 57: Unmatched ( or \(
    
por Jazz Ing 12.09.2017 / 14:13

1 resposta

2

Você está sentindo falta de uma barra invertida antes de um dos ) s. Você provavelmente quis dizer g (globalmente substituir; toda ocorrência) em vez de p (imprimir se a substituição foi bem-sucedida, o que faria com que as linhas substituídas fossem impressas duas vezes). E \{1,\} (ou \+ com algumas implementações) em vez de * ( um ou mais em vez de zero ou mais ):

sed 's/[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}/ANONYMOUS/g' < "$IPLOG"

Ou fatorizou um pouco:

sed 's/\([0-9]\{1,\}\.\)\{3\}[0-9]\{1,\}/ANONYMOUS/g' < "$IPLOG"

Algumas implementações sed têm -E (ou -r como em ssed ou versões mais antigas do GNU sed ) para expressões regulares estendidas que podem torná-lo um pouco mais legível:

sed -E 's/([0-9]+\.){3}[0-9]+/ANONYMOUS/g' < "$IPLOG"
    
por 12.09.2017 / 14:18

Tags