sed: -e expressão # 1, char 56: opção desconhecida para 's' [duplicata]

1

Eu tenho vários diretórios e subdiretórios que incluem arquivos de texto. Eu preciso alterar a linha particular desses arquivos de texto para todos os diretórios e subdiretórios. Eu usei o comando abaixo sed para executar esta tarefa;

find ./ -type f -exec sed -i -e 's/old_line/new_line/g' {} \;

Ele está funcionando se não houver espaço em old_line e new_line. Mas isso não funciona no exemplo abaixo;

old_line=5704550660          SPP91564_2                              ANT # / TYPE

new_line=5704550660          SPP91564_2      NONE                    ANT # / TYPE

quando eu adiciono essas linhas no comando acima de sed, recebo;

sed: -e expression #1, char 56: unknown option to 's'

Como posso modificar o comando acima para funcionar corretamente no exemplo acima?

    
por deepblue 17.08.2017 / 10:16

1 resposta

4

Não são os espaços que estão causando o problema, mas o / no texto. Seu comando lê: sed 's/570455066 .../ TYPE/5704550660.../ TYPE/g' - você vê o problema? Você precisa usar um caractere diferente como o delimitador que não aparece no texto de substituição, digamos :

sed 's:5704550660          SPP91564_2                              ANT # / TYPE:5704550660          SPP91564_2      NONE                    ANT # / TYPE:g'

Você também pode simplesmente escapar do / no texto com uma barra invertida: \/ .

    
por muru 17.08.2017 / 10:36