Discussion:
[shell-script] reduzir tamanho de comando sed
Jorge Barros de Abreu ficmatin10@gmail.com [shell-script]
2017-02-12 09:01:28 UTC
Permalink
Olá.

Como escrever o comando sed abaixo de forma mais reduzida?

sed '/\\begin\x7bitemize\x7d/,/\\end\x7bitemize\x7d/s/
\\begin\x7bitemize\x7d.*\\end\x7bitemize\x7d/
\\begin\x7bitemize\x7d\n\\item Genérico\n\\end\x7bitemize\x7d\n/g'

Obrigado
--
Data Estelar 2457793,916481
http://sites.google.com/site/ficmatinf
Desejo-lhe Paz, Vida Longa e Prosperidade.
São Bem Vindas Mensagens no Formato texto UTF-8 com Acentos.
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2017-02-12 10:57:55 UTC
Permalink
Jorge, é provável que o teu sed possa ser reduzido, porém colabora aê com o
pessoal e não reduza tanto o texto, isso aqui não é twitter, vc pode
escrever muito mais... ;)

Ficaria muito mais fácil para nós se vc mostrasse um trecho do arquivo de
entrada e o que vc quer na saída. Parece que vc quer substituir uns textos
entre 2 padrões (begin e end) por outros, mas ficaria muito mais fácil
tendo o original e o desejado.

Abcs,
Julio

*​Damos treinamento em sua empresa por *
*um preço, no mínimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*

​​
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
Post by Jorge Barros de Abreu ***@gmail.com [shell-script]
Olá.
Como escrever o comando sed abaixo de forma mais reduzida?
sed '/\\begin\x7bitemize\x7d/,/\\end\x7bitemize\x7d/s/
\\begin\x7bitemize\x7d.*\\end\x7bitemize\x7d/
\\begin\x7bitemize\x7d\n\\item Genérico\n\\end\x7bitemize\x7d\n/g'
Obrigado
--
Data Estelar 2457793,916481
http://sites.google.com/site/ficmatinf
Desejo-lhe Paz, Vida Longa e Prosperidade.
São Bem Vindas Mensagens no Formato texto UTF-8 com Acentos.
Jorge Barros de Abreu ficmatin10@gmail.com [shell-script]
2017-02-13 08:34:46 UTC
Permalink
Me desculpem Júlio e Itamar.

O arquivo que vai ser aplicado o comando é um arquivo
latex especificamente a blocos do seguinte formato:

\begin{itemize}
\item xxxx
\item yyy
\item etc
\end{itemize}

A saída deve sempre ser:

\begin{itemize}
\item Genérico
\end{itemize}

A quantidade de entradas \item é sempre diferente e variável.
Jorge, é provável que o teu sed possa ser reduzido, porém colabora
aê com o pessoal e não reduza tanto o texto, isso aqui não é
twitter, vc pode escrever muito mais... ;)
Ficaria muito mais fácil para nós se vc mostrasse um trecho do
arquivo de entrada e o que vc quer na saÃda. Parece que vc quer
substituir uns textos entre 2 padrões (begin e end) por outros, mas
ficaria muito mais fácil tendo o original e o desejado.
Abcs,
Julio
â
Damos treinamento em sua empresa por um preço,Â
no mÃnimo, 50% mais barato que qualquer curso,
com certificado e nota fiscal.
ââ
Nosso time de instrutores in company é formado somente por
â
â
autores
â â
â
de Best Sellers
â â
Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Em 12 de fevereiro de 2017 07:01, Jorge Barros de Abreu
Â
Olá.
Como escrever o comando sed abaixo de forma mais reduzida?
sed '/\\begin\x7bitemize\x7d/,/\\end\x7bitemize\x7d/s/
\\begin\x7bitemize\x7d.*\\end\x7bitemize\x7d/
\\begin\x7bitemize\x7d\n\\item Genérico\n\\end\x7bitemize\x7d\n/g'
Obrigado
--
Data Estelar 2457793,916481
[3]http://sites.google.com/site/ficmatinf
Desejo-lhe Paz, Vida Longa e Prosperidade.
São Bem Vindas Mensagens no Formato texto UTF-8 com Acentos.
Referências
Ligações visíveis
3. http://sites.google.com/site/ficmatinf
4. https://br.groups.yahoo.com/neo/groups/shell-script/conversations/messages/39947;_ylc=X3oDMTJxYmtjMDloBF9TAzk3NDkwNDM3BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BG1zZ0lkAzM5OTQ3BHNlYwNmdHIEc2xrA3JwbHkEc3RpbWUDMTQ4Njg5ODY1OA--?act=reply&messageNum=39947
6. https://br.groups.yahoo.com/neo/groups/shell-script/conversations/newtopic;_ylc=X3oDMTJlbHNjbmtpBF9TAzk3NDkwNDM3BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTQ4Njg5ODY1OA--
7. https://br.groups.yahoo.com/neo/groups/shell-script/conversations/topics/39946;_ylc=X3oDMTM2NWM3bm80BF9TAzk3NDkwNDM3BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BG1zZ0lkAzM5OTQ3BHNlYwNmdHIEc2xrA3Z0cGMEc3RpbWUDMTQ4Njg5ODY1OAR0cGNJZAMzOTk0Ng--
8. http://www.listas-discussao.cjb.net/
9. https://br.groups.yahoo.com/neo/groups/shell-script/info;_ylc=X3oDMTJlbDlyYWVsBF9TAzk3NDkwNDM3BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQ4Njg5ODY1OA--
10. https://br.groups.yahoo.com/neo/groups/shell-script/members/all;_ylc=X3oDMTJmcXI2bnJ2BF9TAzk3NDkwNDM3BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzE0ODY4OTg2NTg-
11. https://br.groups.yahoo.com/neo;_ylc=X3oDMTJkdmNzZWZhBF9TAzk3NDkwNDM1BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxNDg2ODk4NjU4
12. https://info.yahoo.com/privacy/br/yahoo/groups/details.html
14. https://info.yahoo.com/legal/br/yahoo/utos/terms/
--
Data Estelar 2457794,890949
http://sites.google.com/site/ficmatinf
Desejo-lhe Paz, Vida Longa e Prosperidade.
São Bem Vindas Mensagens no Formato texto UTF-8 com Acentos.
itamarnet@yahoo.com.br [shell-script]
2017-02-13 10:30:00 UTC
Permalink
Boa Jorge

Agora ficou bem mais claro a compreensão.
Ter essa visão mais detalhada do problema ajuda em muito no forma como podemos colaborar.
E na mensagem anterior fiquei confuso pois as chaves apareciam com seu código hexadecimal e não sabia se isso era proposital ou uma interpretação errada ao enviar a mensagem.


Eu tenho 2 sugestões para seu caso
1 - SED:
$ sed '/\\end{itemize}/{s/.*/\\begin{itemize}\n\\item Genérico\n&/p};/\\begin{itemize}/,/\\end{itemize}/d' arq.tex


2 - AWK:
$ awk '
/\\end{itemize}/{print "\\begin{itemize}\n\\item Genérico\n" $0}
/\\begin{itemize}/,/\\end{itemize}/{next}
1' arquivo.tex





[]'s
Itamar
Jorge Barros de Abreu ficmatin10@gmail.com [shell-script]
2017-02-13 18:44:36 UTC
Permalink
Obrigado Itamar e Paulo por seu precioso tempo.

Testei as duas soluções do Itamar e funcionaram ambas.

O objetivo desse comando é enxugar um arquivo latex
para reportar erros no latex. Daqueles que só aparecem em
arquivos com muitos pacotes carregados e muito texto escrito.

Obrigado.
Post by ***@yahoo.com.br [shell-script]
Boa Jorge
Agora ficou bem mais claro a compreensão.
Ter essa visão mais detalhada do problema ajuda em muito no forma como
podemos colaborar.
E na mensagem anterior fiquei confuso pois as chaves apareciam com seu
código hexadecimal e não sabia se isso era proposital ou uma
interpretação errada ao enviar a mensagem.
Eu tenho 2 sugestões para seu caso
$ sed '/\\end{itemize}/{s/.*/\\begin{itemize}\n\\item
Genérico\n&/p};/\\begin{itemize}/,/\\end{itemize}/d' arq.tex
$ awk '
/\\end{itemize}/{print "\\begin{itemize}\n\\item Genérico\n" $0}
/\\begin{itemize}/,/\\end{itemize}/{next}
1' arquivo.tex
[]'s
Itamar
Referências
Ligações visíveis
1. https://br.groups.yahoo.com/neo/groups/shell-script/conversations/messages/39950;_ylc=X3oDMTJxcmM4bnQyBF9TAzk3NDkwNDM3BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BG1zZ0lkAzM5OTUwBHNlYwNmdHIEc2xrA3JwbHkEc3RpbWUDMTQ4Njk4MjE3NQ--?act=reply&messageNum=39950
3. https://br.groups.yahoo.com/neo/groups/shell-script/conversations/newtopic;_ylc=X3oDMTJlNmt2NTNxBF9TAzk3NDkwNDM3BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTQ4Njk4MjE3NQ--
4. https://br.groups.yahoo.com/neo/groups/shell-script/conversations/topics/39946;_ylc=X3oDMTM2bTg5bWxpBF9TAzk3NDkwNDM3BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BG1zZ0lkAzM5OTUwBHNlYwNmdHIEc2xrA3Z0cGMEc3RpbWUDMTQ4Njk4MjE3NQR0cGNJZAMzOTk0Ng--
5. http://www.listas-discussao.cjb.net/
6. https://br.groups.yahoo.com/neo/groups/shell-script/info;_ylc=X3oDMTJlODgzZWcyBF9TAzk3NDkwNDM3BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQ4Njk4MjE3NQ--
7. https://br.groups.yahoo.com/neo/groups/shell-script/members/all;_ylc=X3oDMTJmam1pcTVnBF9TAzk3NDkwNDM3BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzE0ODY5ODIxNzU-
8. https://br.groups.yahoo.com/neo;_ylc=X3oDMTJkM2pqMXBrBF9TAzk3NDkwNDM1BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxNDg2OTgyMTc1
9. https://info.yahoo.com/privacy/br/yahoo/groups/details.html
11. https://info.yahoo.com/legal/br/yahoo/utos/terms/
--
Data Estelar 2457795,302049
http://sites.google.com/site/ficmatinf
Desejo-lhe Paz, Vida Longa e Prosperidade.
São Bem Vindas Mensagens no Formato texto UTF-8 com Acentos.
'T.Collons' t.collons@gmail.com [shell-script]
2017-02-13 17:03:00 UTC
Permalink
Boa tarde:

Caro Itamar, eu acho que o amigo ainda não está suficientemente
explicado, com o seu desejo de não querer exibir dados, reduziu a
resposta que ele quer chegar até a "produto genérico"; quando eu acho
que o que ele precisa é de uma linha como "xxx yyy artigo etc." em um
único campo.

Em outras palavras, o que eu acho que ele precisa mesclar as linhas de
item com a opção N

Proponho que:

*sed****-e: a****-e '**$****N;****s /****\****n \\****/****item
de****produto****/**;****/ s**} /****\ n****/**;****ta**!**'****arq.tex*

Salutacions
Pere Navarro
Post by ***@yahoo.com.br [shell-script]
Boa Jorge
Agora ficou bem mais claro a compreensão.
Ter essa visão mais detalhada do problema ajuda em muito no forma como
podemos colaborar.
E na mensagem anterior fiquei confuso pois as chaves apareciam com seu
código hexadecimal e não sabia se isso era proposital ou uma
interpretação errada ao enviar a mensagem.
Eu tenho 2 sugestões para seu caso
$ sed '/\\end{itemize}/{s/.*/\\begin{itemize}\n\\item
Genérico\n&/p};/\\begin{itemize}/,/\\end{itemize}/d' arq.tex
$ awk '
/\\end{itemize}/{print "\\begin{itemize}\n\\item Genérico\n" $0}
/\\begin{itemize}/,/\\end{itemize}/{next}
1' arquivo.tex
[]'s
Itamar
--
Pere

***@gmail.com <mailto:***@gmail.com>



<http://www.imatge.com/>

------------------------------------

AVIS LEGAL

Nota de confidencialitat: Aquest missatge podria contenir missatges
d'empresa i altre informació confidencial tutelada per les lleis de
Europea i altres estats, Si VostÚ el rep per error o sense ser una de
les persones esmenades a la capçalera, haurà de destruir-lo sense
copiar-lo ni revelar-l'ho o qualsevol altre acció relacionada amb el
contingut del missatge i notificar-ho per correu electrònic a l'emissor
del missatge.

Les persones o entitats que incompleixin els deures de confidencialitat
podran ésser perseguides davant dels Tribunals de Justícia sota l'empar
de la legislació civil, penal i administrativa nacional i internacional.

Gracies per la seva cooperació.

------------------------------------

LEGAL NOTICE

Confidentiality notice: This mail may include business and other
confidential information protected under the laws of and other
territories. if you are not one of the intended recipients of the
message, you are legally obliged to delete the message content.
Furthermore, you are kindly requested to report immediately the incident
to the sender.

Breach of confidentiality duties is a serious criminal offence in and
other territories. Offenders shall be legally prosecuted worldwide.

Thank you for your cooperation.
itamarnet@yahoo.com.br [shell-script]
2017-02-14 12:36:07 UTC
Permalink
Caro Peres

Se eu entendi bem o que afirma é que o termo '\item Genérico' que o Jorge pediu poderia ser uma linha com 'item listando produtos numa linha só'


Acho que não era bem isso que o Jorge queria, mas a sua proposta foi interessante.


Só que o sed que você mandou eu não consegui fazer funcionar na minha máquina, mas baseado na sua idéia montei:


considere o arquivo arq.tex
$ cat arq.tex
linha adicional antes
\begin{itemize}
\item xxxx
\item yyy
\item etc
\end{itemize}
linha extra depois




1 - SED:
$ sed '/\\item /{:a;/\\end/!{N;s/\n//;ba;};s/\\item//2g;s/\\end/\n&/}' arq.tex



2 - AWK:
$ awk '
/\\begin{itemize}/,/\\end{itemize}/ {
if ($1 ~ /\\item/) { $1=""; printf $0 }
else { printf ($0 ~ /begin/? $0 "\n\\item":"\n" $0 "\n") }
next
}
1' arq.tex




A saída em ambos os casos foi:
linha adicional antes
\begin{itemize}
\item xxxx yyy etc
\end{itemize}
linha extra depois


Foi isso que entendi. Isso confere?


[]'s
Itamar

phfbettega@yahoo.com.br [shell-script]
2017-02-13 13:35:12 UTC
Permalink
Olá Jorge, uma solução com sed usando loop.

sed -n '/\\begin{itemize}/ {
:a;H;n;/\\end{itemize}/ {s//&/;H};tsaida
ba
:saida;g;s/\\item.*\\end/\\item Genérico\n\\end/;p
}' <<<'\begin{itemize}
Post by Jorge Barros de Abreu ***@gmail.com [shell-script]
\item xxxx
\item yyy
\item etc
\end{itemize}'
\begin{itemize}
\item Genérico
\end{itemize}

Abraços Paulo
Post by Jorge Barros de Abreu ***@gmail.com [shell-script]
Me desculpem Júlio e Itamar.
O arquivo que vai ser aplicado o comando é um arquivo
\begin{itemize}
\item xxxx
\item yyy
\item etc
\end{itemize}
\begin{itemize}
\item Genérico
\end{itemize}
A quantidade de entradas \item é sempre diferente e variável.
Jorge, é provável que o teu sed possa ser reduzido, porém colabora
aê com o pessoal e não reduza tanto o texto, isso aqui não é
twitter, vc pode escrever muito mais... ;)
Ficaria muito mais fácil para nós se vc mostrasse um trecho do
arquivo de entrada e o que vc quer na saÃda. Parece que vc quer
substituir uns textos entre 2 padrões (begin e end) por outros, mas
ficaria muito mais fácil tendo o original e o desejado.
Abcs,
Julio
â
Damos treinamento em sua empresa por um preço,Â
no mÃnimo, 50% mais barato que qualquer curso,
com certificado e nota fiscal.
ââ
Nosso time de instrutores in company é formado somente por
â
â
autores
â â
â
de Best Sellers
â â
Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Em 12 de fevereiro de 2017 07:01, Jorge Barros de Abreu
Â
Olá.
Como escrever o comando sed abaixo de forma mais reduzida?
sed '/\\begin\x7bitemize\x7d/,/\\end\x7bitemize\x7d/s/
\\begin\x7bitemize\x7d.*\\end\x7bitemize\x7d/
\\begin\x7bitemize\x7d\n\\item Genérico\n\\end\x7bitemize\x7d\n/g'
Obrigado
--
Data Estelar 2457793,916481
[3]http://sites.google.com/site/ficmatinf
Desejo-lhe Paz, Vida Longa e Prosperidade.
São Bem Vindas Mensagens no Formato texto UTF-8 com Acentos.
Referências
Ligações visíveis
3. http://sites.google.com/site/ficmatinf
4.
https://br.groups.yahoo.com/neo/groups/shell-script/conversations/messages/39947;_ylc=X3oDMTJxYmtjMDloBF9TAzk3NDkwNDM3BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BG1zZ0lkAzM5OTQ3BHNlYwNmdHIEc2xrA3JwbHkEc3RpbWUDMTQ4Njg5ODY1OA--?act=reply&messageNum=39947
6.
https://br.groups.yahoo.com/neo/groups/shell-script/conversations/newtopic;_ylc=X3oDMTJlbHNjbmtpBF9TAzk3NDkwNDM3BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTQ4Njg5ODY1OA--
7.
https://br.groups.yahoo.com/neo/groups/shell-script/conversations/topics/39946;_ylc=X3oDMTM2NWM3bm80BF9TAzk3NDkwNDM3BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BG1zZ0lkAzM5OTQ3BHNlYwNmdHIEc2xrA3Z0cGMEc3RpbWUDMTQ4Njg5ODY1OAR0cGNJZAMzOTk0Ng--
8. http://www.listas-discussao.cjb.net/
9.
https://br.groups.yahoo.com/neo/groups/shell-script/info;_ylc=X3oDMTJlbDlyYWVsBF9TAzk3NDkwNDM3BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQ4Njg5ODY1OA--
10.
https://br.groups.yahoo.com/neo/groups/shell-script/members/all;_ylc=X3oDMTJmcXI2bnJ2BF9TAzk3NDkwNDM3BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzE0ODY4OTg2NTg-
11.
https://br.groups.yahoo.com/neo;_ylc=X3oDMTJkdmNzZWZhBF9TAzk3NDkwNDM1BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxNDg2ODk4NjU4
12. https://info.yahoo.com/privacy/br/yahoo/groups/details.html
14. https://info.yahoo.com/legal/br/yahoo/utos/terms/
16.
--
Data Estelar 2457794,890949
http://sites.google.com/site/ficmatinf
Desejo-lhe Paz, Vida Longa e Prosperidade.
São Bem Vindas Mensagens no Formato texto UTF-8 com Acentos.
--------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------
itamarnet@yahoo.com.br [shell-script]
2017-02-12 11:32:04 UTC
Permalink
Boas Jorge,
ficou um tanto confuso a compreensão do seu problema e enumero minhas dúvidas

1 - o trecho 'begin' e 'end' originais estão na mesma linha? ou podem ter ocorrências que estejam em linhas separadas e outras na mesma linha?

2 - o texto que está entre os blocos 'begin' e 'end' será substituído mesmo pelo texto '\item Genérico' sempre? Não haverá necessidade de recupera-lo em algum momento?

3 - as chaves representadas em hexadecimal podem ser convertidas?

4 - esse sed já está funcional?

[]'s
Itamar
Loading...