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

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

Re: [shell-script] Dúvida com sed


From: Julio C. Neves
Subject: Re: [shell-script] Dúvida com sed
Date: Wed, 26 Mar 2014 10:19:26 -0300

O problema é que vc, rigidamente, procurou por 4 sequências de 3 números separadas por ponto e nem sempre são 3 números. A sua ER funcionaria pa IPPs do tipo 123.123.123.123. Veja:
$ sed -r 's-^([0-9]{3}).([0-9]{3}).([0-9]{3}).([0-9]{3})$-/teste-' <<< 123.123.123.123
/teste

CQD.
Para funcionar a contento, vc pode fazer:
$ route -n | sed -r 's/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/teste-teste-teste-teste/'
Tabela de Roteamento IP do Kernel
Destino         Roteador        MáscaraGen.    Opções Métrica Ref   Uso Iface
teste-teste-teste-teste         192.168.42.129  0.0.0.0         UG    0      0        0 usb0
teste-teste-teste-teste    0.0.0.0         255.255.255.0   U     1      0        0 usb0

Mas nesse caso vc substitui só a 1ª ocorrencia de cada linha. Para substituir todas, é só informar que a substituição é global (g). Veja:
$ route -n | sed -r 's/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/teste-teste-teste-teste/g'
Tabela de Roteamento IP do Kernel
Destino         Roteador        MáscaraGen.    Opções Métrica Ref   Uso Iface
teste-teste-teste-teste         teste-teste-teste-teste  teste-teste-teste-teste         UG    0      0        0 usb0
teste-teste-teste-teste    teste-teste-teste-teste         teste-teste-teste-teste   U     1      0        0 usb0

Mas o processo mais curto e enxuto de fazer a mesma tarefa é:
$ route -n | sed -r 's/([0-9]{1,3}\.){3}[0-9]{1,3}/teste-teste-teste-teste/g'
Tabela de Roteamento IP do Kernel
Destino         Roteador        MáscaraGen.    Opções Métrica Ref   Uso Iface
teste-teste-teste-teste         teste-teste-teste-teste  teste-teste-teste-teste         UG    0      0        0 usb0
teste-teste-teste-teste    teste-teste-teste-teste         teste-teste-teste-teste   U     1      0        0 usb0

Tudo isso sem fazer I/O em disco que vc deveria ter evitado


Abcs,
Julio
@juliobash

Próximos cursos de Shell

Cidade

Local

Período

Rio de Janeiro

EDX

07-11/04

Dou treinamento de shell em qualquer cidade.
Para detalhes, entre em contato por email ou
echo 436233889341364416673541503686485725801923229706P | dc 



Em 26 de março de 2014 00:16, Bezaleel Ramos <address@hidden> escreveu:
 

Galera,

Não estou desenvolvendo script nada, só queria tirar uma dúvida com o sed.

Cenário:

Criei um arquivo onde peguei a saida do comando route -n e armazenei neste arquivo.

Quando eu uso o sed para substituir as primeiras cadeia de três números que vai [0-9]:

$sed -r 's/([0-9]{3})/teste/' route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         teste.168.1.1     0.0.0.0         UG    0      0        0 wlan0
teste.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan0

Ele substitui mas quando uso:

$sed -r 's-^([0-9]{3}).([0-9]{3}).([0-9]{3}).([0-9]{3})$-/teste-' route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 wlan0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan0

Como vocês  pode vê ele não substitui.

Pesquisei no fórum algo relacionado o mais próximo que peguei foi do Julio,  e tentei algo como:

$  sed -r 's|([0-9]{3}).([0-9]{3}).([0-9]{3}).([0-9]{3})|\teste|' route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 wlan0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan0

Alguém sabe como tenho que organizar esta expressão para da certo?

Vlw




--



Bezaleel Ramos da Silva
Tel. (21) 7996-1531



reply via email to

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