Problema com sed em caracteres especiais [RESOLVIDO]

1. Problema com sed em caracteres especiais [RESOLVIDO]

Steve
Steve

(usa Slackware)

Enviado em 13/02/2019 - 22:50h

Estou tentando comparar 2 arquivos e remover do 2º arquivo o que eu já possuo no primeiro.
Em uma pergunta anterior que fiz, o xxxx respondeu me dando o comando abaixo, que funciona muito bem para caracteres comuns.
while read Linha; do sed -i "/^${Linha}$/d" List; done < Adblock.ini 

Porém nessa lista, ela possue caracteres como: # / \ : ; ! @ . , ~ ^ $ & - = + [ ] { } | % ( ) _ ' ` " '
Entre outros que posso ter esqueçido de colocar. Então o sed gera erros e não faz o trabalho corretamente.

No terminal mostra alguns erros assim:
sed: -e expression #1, char 23: unknown command: `$'
sed: -e expression #1, char 21: unknown command: `j'
sed: -e expression #1, char 15: extra characters after command
sed: -e expression #1, char 38: expected newer version of sed
sed: -e expression #1, char 14: unknown command: `*'
sed: can't find label for jump to `anner_$/d'
sed: can't find label for jump to `anner-$/d'
sed: can't find label for jump to `anner/*$domain=~a4tech.com$/d'
sed: can't find label for jump to `anners/*$/d'
sed: -e expression #1, char 8: unknown command: `$'
sed: -e expression #1, char 26: unterminated `s' command

Como cada linha está sendo passada para o sed por variável, acredito que caracteres como PONTO ou Barra estão dando problemas entre outros claro. Já que esses caracteres precisam do ESCAPE do sed para serem aceitos!

Alguem tem alguma idéia de como posso passar isso?



  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 14/02/2019 - 22:54h


Steve escreveu:

Estou tentando comparar 2 arquivos e remover do 2º arquivo o que eu já possuo no primeiro.
Em uma pergunta anterior que fiz, o xxxx respondeu me dando o comando abaixo, que funciona muito bem para caracteres comuns.
while read Linha; do sed -i "/^${Linha}$/d" List; done < Adblock.ini 

Porém nessa lista, ela possue caracteres como: # / \ : ; ! @ . , ~ ^ $ & - = + [ ] { } | % ( ) _ ' ` " '
Entre outros que posso ter esqueçido de colocar. Então o sed gera erros e não faz o trabalho corretamente.

No terminal mostra alguns erros assim:
sed: -e expression #1, char 23: unknown command: `$'
sed: -e expression #1, char 21: unknown command: `j'
sed: -e expression #1, char 15: extra characters after command
sed: -e expression #1, char 38: expected newer version of sed
sed: -e expression #1, char 14: unknown command: `*'
sed: can't find label for jump to `anner_$/d'
sed: can't find label for jump to `anner-$/d'
sed: can't find label for jump to `anner/*$domain=~a4tech.com$/d'
sed: can't find label for jump to `anners/*$/d'
sed: -e expression #1, char 8: unknown command: `$'
sed: -e expression #1, char 26: unterminated `s' command

Como cada linha está sendo passada para o sed por variável, acredito que caracteres como PONTO ou Barra estão dando problemas entre outros claro. Já que esses caracteres precisam do ESCAPE do sed para serem aceitos!

Alguem tem alguma idéia de como posso passar isso?


Boa noite.
Para contornar a situação dos MetaCaracteres, teste o seguinte comando:
cat arq1.txt
Linha_1$
Linha_2*
Linha_3?
Linha_4|
Linha_5
Linha_6
Linha_7

cat arq2.txt
Linha_1$
Linha_2*
Linha_3?
Linha_4|
Linha_5
Linha_6
Linha_7
Linha_7.5
Linha_8
Linha_9
Linha_10

diff arq2.txt arq1.txt|sed -n 's/^< //p' 

Novo conteúdo de arq2, as linhas de arq1 foram eliminadas
Linha_7.5
Linha_8
Linha_9
Linha_10
diff arq2.txt arq1.txt|sed -n 's/^< //p' > arq3.txt;cat arq3.txt>arq2.txt 

att.
marcelo oliver





Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts