shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] sed replace na primeira e segunda ocorrência após str


From: Julio C. Neves
Subject: Re: [shell-script] sed replace na primeira e segunda ocorrência após string
Date: Thu, 29 Mar 2018 11:22:23 -0300

Justamente por estar poluído, não vi que tinha outras vírgulas depois do MAKITA. Teria de refazer minha sugestão da seguinte forma:

sed 's/ADDITEM=/\n/g' | sed 's/,/\<\/td\>\<td\>/; s/,/\<\/td\>\<td\>/' | tr -d '\n'

Troquei o ADDITEM= por um <ENTER>, troquei a primeira vírgula e troquei novamnte a primeira vírgula (que seria a segunda) e depois deletaria os <ENTER> que criei. Mas aí já ficaria uma porcaria, grande e lenta.

Mas até foi legal, pois posso mostrar uma coisa que não é muito badalada. Veja:

S sed 's/a/X/1' <<< cadeia
cXdeia
$ sed 's/a/X/2' <<< cadeia
cadeiX

Como vc viu, no 1⁰ exemplo só trocou o 1⁰ 'a' (mas nem precisava deste 1, que é o default), no 2⁰ trocou o outro (e 'g' trocaria todos). Pouca gente sabe que vc pode especificar em qual ocorrência vc deseja a troca.

Abraços,
Julio

» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
» O treinamento está muito caro?
O melhor de todos em EAD é http://www.dicas-l.com.br/cursos/psl/

Damos treinamento em sua empresa com certificado
e nota fiscal por um preço, no mínimo, 50% abaixo
de qualquer curso.

​​
Nosso time de instrutores in company é formado somente por
autores
​ ​
de Best Sellers
​ ​
​laureados ​sobre os temas. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico










Em 28 de março de 2018 18:50, Julio C. Neves <address@hidden> escreveu:
O teu exemplo estava meio poluído e dificil de entender, mas será que o que vc quer é isso:

sed 's/ADDITEM=/\n/g; s/,/\<\/td\>\<td\>/g'

se for essa saída, basta depois matar os \n e substituir ^ e $

Abraços,
Julio

» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
» O treinamento está muito caro?
O melhor de todos em EAD é http://www.dicas-l.com.br/cursos/psl/

Damos treinamento em sua empresa com certificado
e nota fiscal por um preço, no mínimo, 50% abaixo
de qualquer curso.

​​
Nosso time de instrutores in company é formado somente por
autores
​ ​
de Best Sellers
​ ​
​laureados ​sobre os temas. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico










Em 28 de março de 2018 16:22, address@hidden [shell-script] <address@hidden.br> escreveu:
 

Olá pessoal, tudo bem?

Preciso de uma ajuda. Tenho uma string e preciso fazer algumas substituições.

A string está estruturada assim:

ADDITEM=(número entre 1 e 99999),(número entre 1 e 99999),(qualquer caractere alfanumérico ou não, visível,incluindo ponto,vírgula, exclamação, interrogação, etc)&(repetição do padrão iniciando com ADDITEM)

Esta é a string original:

ADDITEM=24720,1,BITS PHIL.CTPOHR N2 X  70MM C/10&ADDITEM=24722,1,BITS PHIL.CTPOHR N2 X 127MM C/10&ADDITEM=24723,1,BITS PHIL.CTPOHR N2 X 150MM C/10&ADDITEM=24724,1,BITS PHIL.CTPOHR TITAN.2X25MM C/10&ADDITEM=24725,1,BITS PHIL.CTPOHR TITAN.2X50MM C/10&ADDITEM=14862,10,BITS PHIL.MAKITA N,1 X 25MM / 656&ADDITEM=14863,20,BITS PHIL.MAKITA N,2 X 25MM / 657&ADDITEM=20026,20,BITS PHIL.MAKITA N,3 X 25MM / 65 &ADDITEM=14865,10,BITS PHIL.MAKITA N.1 X 50MM / 666&ADDITEM=14866,10,BITS PHIL.MAKITA N.2 X 50MM / 667

Preciso substituir a primeira e a segunda vírgula após ADDITEM, ambas por </td><td>

Não posso simplesmente pedir ao sed para substituir todas as vírgulas pois há produtos que tem vírgula na descrição.

Ao final a string ficará assim:

<tr><td>24720</td><td>1</td><td>BITS PHIL.CTPOHR N2 X  70MM C/10</td><td>24722</td><td>1</td><td>BITS PHIL.CTPOHR N2 X 127MM C/10</td><td>24723</td><td>1</td><td>BITS PHIL.CTPOHR N2 X 150MM C/10</td><td>24724</td><td>1</td><td>BITS PHIL.CTPOHR TITAN.2X25MM C/10</td><td>24725</td><td>1</td><td>BITS PHIL.CTPOHR TITAN.2X50MM C/10</td><td>14862</td><td>10</td><td>BITS PHIL.MAKITA N,1 X 25MM / 656</td><td>14863</td><td>20</td><td>BITS PHIL.MAKITA N,2 X 25MM / 657</td><td>20026</td><td>20</td><td>BITS PHIL.MAKITA N,3 X 25MM / 65 </td><td>14865</td><td>10</td><td>BITS PHIL.MAKITA N.1 X 50MM / 666</td><td>14866</td><td>10</td><td>BITS PHIL.MAKITA N.2 X 50MM / 667</tr>


Quanto às substituições no início e no final da string nenhum problema. O uso do sed com ^ e $ resolvem a questão.


O ponto é identificar a primeira e a segunda vírgula após ADDITEM e fazer a substituição.


Alguém consegue me ajudar?




reply via email to

[Prev in Thread] Current Thread [Next in Thread]