sed - encontrar e substituir [RESOLVIDO]

1. sed - encontrar e substituir [RESOLVIDO]

jorge
katzer

(usa Ubuntu)

Enviado em 30/03/2012 - 12:31h

tenho um arquivo com algumas linhas separadas por (<, > ou | ):

------
Dados da memoria Dados da memoria
Tamanho da memoria: 3 GB | Tamanho da memoria: 1 GB + 896 MB

Dados do mouse Dados do mouse
Modelo: "AT.." Modelo: "AT.."
vendedor: xxx >
---------
para encontrar digito sed -n '/|\|>\|</p' copia.txt e ele me retorna todas as linhas com estes caracteres

como faço para colocar estas linhas que tem <, > e | entre as tags deste modo?

<font color="#0000AA">Tamanho da memoria: 3 GB | Tamanho da memoria: 1 GB + 896 MB</font>




  


2. Re: sed - encontrar e substituir [RESOLVIDO]

Vinicius Miqueloti
Miqueloti

(usa Lubuntu)

Enviado em 30/03/2012 - 14:27h

Você possui php na maquina?
Caso possua, fiz este script para você:


<?php
if ($argc != 2) {
echo 'USO: php lineMark.php <arquivo>';
}
$arquivo = fopen($argv[1], "r");
$newArquivo = "";
$i = 0;
if ($arquivo){
while(!feof($arquivo)){
$linha = fgets($arquivo, 4096);
if (strpos($linha, "<") || strpos($linha, ">") || strpos($linha, "|")){
$newArquivo = $newArquivo."<font color='#0000AA'>".$linha."</font>";
$i++;
}
else {
$newArquivo = $newArquivo.$linha;
}
}
}
fclose($arquivo);
file_put_contents($argv[1], $newArquivo);
echo $i." linhas marcadas no arquivo ".$argv[1];
?>


Para utilizar, basta salvá-lo como lineMark.php, adicionar o php a variável de ambiente e para utilizar, vá onde encontra o arquivo, bota o script no mesmo diretório e execute através do comando php lineMaker.php arquivo

O script demonstrou ser funcional nos testes, mais qualquer coisa fala ai.


3. Re: sed - encontrar e substituir [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 31/03/2012 - 00:19h

Em shell:


#!/bin/bash

[ ! -f "$1" ] && echo "Sintaxe $0 aquivo" && exit 1
# obs troquei o > e < por seus valores em html para evitar problemas ao exibir seu arquivo nos navegadores.
sed -n '/|\|>\|</p' "$1" | sed 's/>/\&gt;/p' | sed 's/</\&lt;/p' > /tmp/temp.txt

while read LINHA
do
echo -e "<font color='#0000AA'>$LINHA</font><br/>\n" >> novo_"$1".html
done < "/tmp/temp.txt"



4. Re: sed - encontrar e substituir [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 31/03/2012 - 22:35h

rai3mb escreveu:

Em shell:


#!/bin/bash

[ ! -f "$1" ] && echo "Sintaxe $0 aquivo" && exit 1
# obs troquei o > e < por seus valores em html para evitar problemas ao exibir seu arquivo nos navegadores.
sed -n '/|\|>\|</p' "$1" | sed 's/>/\>/p' | sed 's/</\</p' > /tmp/temp.txt

while read LINHA
do
echo -e "<font color='#0000AA'>$LINHA</font><br/>\n" >> novo_"$1".html
done < "/tmp/temp.txt"


Cabra bão :)


5. sed - encontrar e substituir

jorge
katzer

(usa Ubuntu)

Enviado em 02/04/2012 - 14:38h

Obrigado pela ajuda. Lembro porém que o arquivo tem apenas algumas linhas com |, < ou >. Sendo que as outras não possuem

fiz assim para algumas linhas:

Ex de linha
HOSTNAME HOSTNAME


#adiciona texto <font color="#0000AA"> no inicio da linha que começa com 'HOSTNAME' e no final da linha adiciona </font> na linha que termina com 'HOSTNAME'
sed -i -e 's/^HOSTNAME/<font color="#0000AA">HOSTNAME<\/font>/g' -e 's/HOSTNAME$/<font color="#0000AA">HOSTNAME<\/font>/' teste.html

O resultado em html é:
<font color="#0000AA">HOSTNAME</font> <font color="#0000AA">HOSTNAME</font>

Isso funciona pois tenho algumas linhas com texto conhecido como HOSTNAME, DADOS DA PLACA MÃE.....

O problema é que as linhas onde vão estar o |, < ou > são indeterminadas

o comando sed -n '/|\|>\|</p' copia.txt lista estas linhas para mim, preciso apenas colocar o html no inicio e no final destas linhas. Sei que isso é possível usando o sed mesmo. Estou vendo o que consigo.


6. Re: sed - encontrar e substituir [RESOLVIDO]

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 03/04/2012 - 00:25h

algo +/- assim?

sed -i -e 's/.*|.*./<font color="#0000AA">&<\/font>/' arquivo


7. sed - encontrar e substituir

jorge
katzer

(usa Ubuntu)

Enviado em 03/04/2012 - 11:55h

Agradeço imensamente todos que me auxiliaram. Cheguei a uma solução que talvez possa ser melhorada, e com certeza não teria chegado se não fosse esse apoio.

arquivo copia.txt
------------------
arquivo anterior: 03042012112017.10.24.208.138.txt ultimo arquivo: 03042012113453.10.24.208.138.txt

HOSTNAME HOSTNAME
terminal-138 terminal-138

DADOS TCP/IP DADOS TCP/IP
10.24.208.138 10.24.208.138

DADOS DA BIOS DADOS DA BIOS
SMBIOS Versao: 2.5 SMBIOS Versao: 2.5
Versao: "080015" Versao: "080015"
Fabricante: "BIOSTAR Group" Fabricante: "BIOSTAR Group"
Produto: "G41D3C" Produto: "G41D3C"
Versao: "' '" Versao: "' '"
Placa Mae: #2 Placa Mae: #2
Fabricante: "BIOSTAR Group" Fabricante: "BIOSTAR Group"
Produto: "G41D3C" Produto: "G41D3C"
Versao: "' '" Versao: "' '"
Fabricante: "BIOSTAR Group" Fabricante: "BIOSTAR Group"
Versao: "' '" Versao: "' '"
Informacoes do Processador: #4 Informacoes do Processador: #4
Socket: "CPU 1" Socket: "CPU 1"
Fabricante: "Intel" Fabricante: "Intel"
Versao: "Intel(R) Celeron(R) CPU E3400 @ 2.60GHz" Versao: "Intel(R) Celeron(R) CPU E3400 @ 2.60GHz"

DADOS DA CPU DADOS DA CPU
Modelo: 6.23.10 "Intel(R) Celeron(R) CPU E3400 @ 2. Modelo: 6.23.10 "Intel(R) Celeron(R) CPU E3400 @ 2.

DADOS DO DISCO RIGIDO DADOS DO DISCO RIGIDO
Modelo: "WDC WD5000AAKX-0" Modelo: "WDC WD5000AAKX-0"
Vendedor: "WDC" Vendedor: "WDC"
Dispositivo: "WD5000AAKX-0" Dispositivo: "WD5000AAKX-0"
Tamanho: 500 GB Tamanho: 500 GB

DADOS DO MONITOR DADOS DO MONITOR
Modelo: "AOC 1950W" Modelo: "AOC 1950W"
Vendedor: AOC "AOC" Vendedor: AOC "AOC"
Dispositivo: eisa 0x1950 "1950W" Dispositivo: eisa 0x1950 "1950W"

DADOS DA MEMORIA DADOS DA MEMORIA
Tamanho da memoria: 3 GB Tamanho da memoria: 3 GB

DADOS DO MOUSE DADOS DO MOUSE
Modelo: "USB Optical Mouse" Modelo: "USB Optical Mouse"
Vendedor: usb 0x192f Vendedor: usb 0x192f
Dispositivo: usb 0x0416 "USB Optical Mouse" Dispositivo: usb 0x0416 "USB Optical Mouse"

DADOS DO TECLADO DADOS DO TECLADO
Modelo: "AT Translated Set 2 keyboard" Modelo: "AT Translated Set 2 keyboard"
Vendedor: 0x0001 Vendedor: 0x0001
Dispositivo: 0x0001 "AT Translated Set 2 keyboard" Dispositivo: 0x0001 "AT Translated Set 2 keyboard"
XkbModelo: pc104 XkbModelo: pc104

DADOS DE PLACA DE REDE DADOS DE PLACA DE REDE
Modelo: "Sundance Technology Inc / IC Plus IC Plus IP100A I Modelo: "Sundance Technology Inc / IC Plus IC Plus IP100A I

DADOS DO DRIVE DE CDROM DADOS DO DRIVE DE CDROM
> Modelo: "ATAPI iHAS122"
------------------

arquivo gerarhtml.sh
--------------------
catdoc copia.txt | txt2html > teste.html
#substitui a palavra "arquivo anterior" por "<font color="#0000AA">arquivo anterior:<\/font>"
sed -i -e 's/arquivo anterior:/<font color="#0000AA">arquivo anterior:<\/font>/g' teste.html

#substitui a palavra "ultimo arquivo" por "<font color="#0000AA">ultimo arquivo:<\/font>"
sed -i -e 's/ultimo arquivo:/<font color="#0000AA">ultimo arquivo:<\/font>/g' teste.html


#adiciona texto <font color="#0000AA">PALAVRA</font> no inicio da linha
#adiciona texto <font color="#0000AA">PALAVRA</font> no final da linha
sed -i -e 's/^HOSTNAME/<font color="#0000AA">HOSTNAME<\/font>/g' -e 's/HOSTNAME$/<font color="#0000AA">HOSTNAME<\/font>/' teste.html
sed -i -e 's/^DADOS TCP\/IP/<font color="#0000AA">DADOS TCP\/IP<\/font>/g' -e 's/DADOS TCP\/IP$/<font color="#0000AA">DADOS TCP\/IP<\/font>/' teste.html
sed -i -e 's/^DADOS DA BIOS/<font color="#0000AA">DADOS DA BIOS<\/font>/g' -e 's/DADOS DA BIOS$/<font color="#0000AA">DADOS DA BIOS<\/font>/' teste.html
sed -i -e 's/^DADOS DA CPU/<font color="#0000AA">DADOS DA CPU<\/font>/g' -e 's/DADOS DA CPU$/<font color="#0000AA">DADOS DA CPU<\/font>/' teste.html
sed -i -e 's/^DADOS DO DISCO RIGIDO/<font color="#0000AA">DADOS DO DISCO RIGIDO<\/font>/g' -e 's/DADOS DO DISCO RIGIDO$/<font color="#0000AA">DADOS DO DISCO RIGIDO<\/font>/' teste.html
sed -i -e 's/^DADOS DO MONITOR/<font color="#0000AA">DADOS DO MONITOR<\/font>/g' -e 's/DADOS DO MONITOR$/<font color="#0000AA">DADOS DO MONITOR<\/font>/' teste.html
sed -i -e 's/^DADOS DA MEMORIA/<font color="#0000AA">DADOS DA MEMORIA<\/font>/g' -e 's/DADOS DA MEMORIA$/<font color="#0000AA">DADOS DA MEMORIA<\/font>/' teste.html
sed -i -e 's/^DADOS DO MOUSE/<font color="#0000AA">DADOS DO MOUSE<\/font>/g' -e 's/DADOS DO MOUSE$/<font color="#0000AA">DADOS DO MOUSE<\/font>/' teste.html
sed -i -e 's/^DADOS DO TECLADO/<font color="#0000AA">DADOS DO TECLADO<\/font>/g' -e 's/DADOS DO TECLADO$/<font color="#0000AA">DADOS DO TECLADO<\/font>/' teste.html
sed -i -e 's/^DADOS DE PLACA DE REDE/<font color="#0000AA">DADOS DE PLACA DE REDE<\/font>/g' -e 's/DADOS DE PLACA DE REDE$/<font color="#0000AA">DADOS DE PLACA DE REDE<\/font>/' teste.html
sed -i -e 's/^DADOS DO DRIVE DE CDROM/<font color="#0000AA">DADOS DO DRIVE DE CDROM<\/font>/g' -e 's/DADOS DO DRIVE DE CDROM$/<font color="#0000AA">DADOS DO DRIVE DE CDROM<\/font>/' teste.html


#adiciona <font color="#FF0000">TEXTO DA LINHA</font> na linha que contem o caracter |
sed -i -e 's/\(.*\)\(.|\)\(.*\)/<font color="#FF0000">\1\2\3<\/font>/' teste.html

#adiciona <font color="#FF0000">TEXTO DA LINHA</font> na linha que contem o caracter &
sed -i -e 's/\(.*\)\(&\)\(.*\)/<font color="#FF0000">\1\2\3<\/font>/' teste.html
--------------------


resusltado em html
---------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta name="generator" content="HTML::TextToHTML v2.51"/>
</head>
<body>
<p><font color="#0000AA">arquivo anterior:</font> 03042012112017.10.24.208.138.txt <font color="#0000AA">ultimo arquivo:</font> 03042012113453.10.24.208.138.txt
</p>
<pre>
<font color="#0000AA">HOSTNAME</font> <font color="#0000AA">HOSTNAME</font>

terminal-138 terminal-138

<font color="#0000AA">DADOS TCP/IP</font> <font color="#0000AA">DADOS TCP/IP</font>
<a href="telnet://10.24.208.138:10">10.24.208.138 10</a>.24.208.138

<font color="#0000AA">DADOS DA BIOS</font> <font color="#0000AA">DADOS DA BIOS</font>
SMBIOS Versao: 2.5 SMBIOS Versao: 2.5
Versao: "080015" Versao: "080015"
Fabricante: "BIOSTAR Group" Fabricante: "BIOSTAR Group"
Produto: "G41D3C" Produto: "G41D3C"
Versao: "' '" Versao: "' '"
Placa Mae: #2 Placa Mae: #2
Fabricante: "BIOSTAR Group" Fabricante: "BIOSTAR Group"
Produto: "G41D3C" Produto: "G41D3C"
Versao: "' '" Versao: "' '"
Fabricante: "BIOSTAR Group" Fabricante: "BIOSTAR Group"
Versao: "' '" Versao: "' '"
Informacoes do Processador: #4 Informacoes do Processador: #4
Socket: "CPU 1" Socket: "CPU 1"
Fabricante: "Intel" Fabricante: "Intel"
Versao: "Intel(R) Celeron(R) CPU E3400 @ 2.60GHz" Versao: "Intel(R) Celeron(R) CPU E3400 @ 2.60GHz"

<font color="#0000AA">DADOS DA CPU</font> <font color="#0000AA">DADOS DA CPU</font>

Modelo: 6.23.10 "Intel(R) Celeron(R) CPU E3400 @ 2. Modelo: 6.23.10 "Intel(R) Celeron(R) CPU E3400 @ 2.

<font color="#0000AA">DADOS DO DISCO RIGIDO</font> <font color="#0000AA">DADOS DO DISCO RIGIDO</font>
Modelo: "WDC WD5000AAKX-0" Modelo: "WDC WD5000AAKX-0"
Vendedor: "WDC" Vendedor: "WDC"
Dispositivo: "WD5000AAKX-0" Dispositivo: "WD5000AAKX-0"
Tamanho: 500 GB Tamanho: 500 GB

<font color="#0000AA">DADOS DO MONITOR</font> <font color="#0000AA">DADOS DO MONITOR</font>
Modelo: "AOC 1950W" Modelo: "AOC 1950W"
Vendedor: AOC "AOC" Vendedor: AOC "AOC"
Dispositivo: eisa 0x1950 "1950W" Dispositivo: eisa 0x1950 "1950W"

<font color="#0000AA">DADOS DA MEMORIA</font> <font color="#0000AA">DADOS DA MEMORIA</font>

Tamanho da memoria: 3 GB Tamanho da memoria: 3 GB

<font color="#0000AA">DADOS DO MOUSE</font> <font color="#0000AA">DADOS DO MOUSE</font>
Modelo: "USB Optical Mouse" Modelo: "USB Optical Mouse"
Vendedor: usb 0x192f Vendedor: usb 0x192f
Dispositivo: usb 0x0416 "USB Optical Mouse" Dispositivo: usb 0x0416 "USB Optical Mouse"

<font color="#0000AA">DADOS DO TECLADO</font> <font color="#0000AA">DADOS DO TECLADO</font>
Modelo: "AT Translated Set 2 keyboard" Modelo: "AT Translated Set 2 keyboard"
Vendedor: 0x0001 Vendedor: 0x0001
Dispositivo: 0x0001 "AT Translated Set 2 keyboard" Dispositivo: 0x0001 "AT Translated Set 2 keyboard"
XkbModelo: pc104 XkbModelo: pc104

<font color="#0000AA">DADOS DE PLACA DE REDE</font> <font color="#0000AA">DADOS DE PLACA DE REDE</font>

Modelo: "Sundance Technology Inc / IC Plus IC Plus IP100A I Modelo: "Sundance Technology Inc / IC Plus IC Plus IP100A I

<font color="#0000AA">DADOS DO DRIVE DE CDROM</font> <font color="#0000AA">DADOS DO DRIVE DE CDROM</font>
<font color="#FF0000"> &gt; Modelo: "ATAPI iHAS122"</font>
</pre>
</body>
</html>

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

Notem que para os simbolos < e > o txt2html coloca &gt então na linha
sed -i -e 's/\(.*\)\(&\)\(.*\)/<font color="#FF0000">\1\2\3<\/font>/' teste.html coloquei o simbolo &.

será que vou ter um problema com alguns navegadores que não sejam mozila ou firefox? Por enquanto nos meus testes está funcionando.



8. Re: sed - encontrar e substituir [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 03/04/2012 - 21:59h

Então podemos abandonar a tentativa aqui: http://vivaolinux.com.br/topico/Shell-Script/converter-txt-para-html e fechar a pendência ?




9. sed - encontrar e substituir

jorge
katzer

(usa Ubuntu)

Enviado em 04/04/2012 - 09:11h

Tudo bem Geraldo. Podemos sim. Sou funcionário público. Temos umas 200 máquinas em rede. Necessitei fazer um controle do parque computacional. Criei com ajuda da comunidade scripts que enviam das máquinas clientes para minha máquina relatórios de hardware. Minha máquina tem outro script que faz a comparação e me informa as alterações que ocorreram nas estações. Eu gostaria de compartilhar isso com todos e se possível melhorar o que fiz. Estou a disposição. Quem desejar manda um email para zukatzer@gmail.com que envio os scripts.


10. Re: sed - encontrar e substituir [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 04/04/2012 - 21:49h

katzer escreveu:

Tudo bem Geraldo. Podemos sim. Sou funcionário público. Temos umas 200 máquinas em rede. Necessitei fazer um controle do parque computacional. Criei com ajuda da comunidade scripts que enviam das máquinas clientes para minha máquina relatórios de hardware. Minha máquina tem outro script que faz a comparação e me informa as alterações que ocorreram nas estações. Eu gostaria de compartilhar isso com todos e se possível melhorar o que fiz. Estou a disposição. Quem desejar manda um email para zukatzer@gmail.com que envio os scripts.


Opa quero ajudar sim :)
Te enviei e-mail via o VOL informando o meu e-mail. Se recebeu meu pedido me avisa pq não recebi nada ainda.





11. Re: sed - encontrar e substituir [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 04/04/2012 - 23:14h

Posta na sessão de scripts, assim todos podem dar uma olhada e contribuir com revisões para você.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts