Buscar string em arquivo [RESOLVIDO]

1. Buscar string em arquivo [RESOLVIDO]

henrique
henriquew

(usa Ubuntu)

Enviado em 09/11/2015 - 08:15h

Bom dia, novamente estou com um problema,
meu arquivo pode contér uma das linhas abaixo, contendo o seguinte texto:
%%Title: 192.168.52.3:8000
%%Title: Teste - Arquivo
%%Title: henrique\857
Preciso armazenar todo o texto a partir de %%Title: no caso, "192.168.52.3:8000" ou "Teste - Arquivo" ou "henrique\857". Que são as possibilidades de texto no arquivo.
Estou usando o seguinte comando:

nome_arq_enviado=`cat $arquivod | grep '%%Title:' | tail -n 1 | awk -F":" '{print$2":"$3}' | sed 's/.pdf//' | sed 's/[):(]//g' | sed 's/^[ \t]*//' | sed 's/[ \t]*$//'`

mas no caso do %%Title: 192.168.52.3:8000 ele traz apenas 192.168.52.3:8000 sem o ":"

Alguem tem idéia?


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 09/11/2015 - 10:37h

O sinal de dois pontos está sumindo por causa deste elemento da pipeline:
sed 's/[):(]//g' 


Por que, aliás, usar um pipeline com tantos passos? Você já está usando o awk, que é capaz de fazer a função para a qual você o chamou e também as dos seds que vêm depois.

De todo modo, se você quer simplesmente pegar a última ocorrência de linha começando com o texto “%%Title: ”, suprimindo esse prefixo, o seguinte comando basta.

awk '/^%%Title: / { origem=substr($0, 10) }  END { print origem }' 


Leia a documentação do awk. Para outras substituições na string, você talvez queira estudar as funções match(), gsub() e gensub().

3. Resp: Buscar string em arquivo

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/11/2015 - 09:11h

Bom dia Henrique.
Os ":" que você se refere dão os separadores do IP:Porta?
É isso que que você quer na saída?
192.168.52.3:8000
Teste - Arquivo
henrique\857

cat Title.txt
%%Title: 192.168.52.3:8000
%%Title: Teste - Arquivo
%%Title: henrique\857

cut -d: -f2- Title.txt | sed 's/^[ ]\+//'
192.168.52.3:8000
Teste - Arquivo
henrique\857

Abç.,
Marcelo






4. Re: Buscar string em arquivo [RESOLVIDO]

henrique
henriquew

(usa Ubuntu)

Enviado em 09/11/2015 - 09:20h

msoliver escreveu:

Bom dia Henrique.
Os ":" que você se refere dão os separadores do IP:Porta?
É isso que que você quer na saída?
192.168.52.3:8000
Teste - Arquivo
henrique\857

cat Title.txt
%%Title: 192.168.52.3:8000
%%Title: Teste - Arquivo
%%Title: henrique\857

cut -d: -f2- Title.txt | sed 's/^[ ]\+//'
192.168.52.3:8000
Teste - Arquivo
henrique\857

Abç.,
Marcelo





Exato, o arquivo pode conter :
%%Title: 192.168.52.3:8000
%%Title: Teste - Arquivo
%%Title: henrique\857

pelo comando que mencionei:
nome_arq_enviado=`cat $arquivod | grep '%%Title:' | tail -n 1 | awk -F":" '{print$2":"$3}' | sed 's/.pdf//' | sed 's/[):(]//g' | sed 's/^[ \t]*//' | sed 's/[ \t]*$//'`

eu consigo obter:
192.168.52.38000
Teste - Arquivo
henrique\857

No entanto, precisaria que no caso do "192.168.52.38000" fosse obtido "192.168.52.3:8000"

Esta é a saída que desejo:
192.168.52.3:8000
Teste - Arquivo
henrique\857

Tem idéia de como posso fazer isso?



5. Re: Buscar string em arquivo [RESOLVIDO]

henrique
henriquew

(usa Ubuntu)

Enviado em 09/11/2015 - 11:13h

paulo1205 escreveu:

O sinal de dois pontos está sumindo por causa deste elemento da pipeline:
sed 's/[):(]//g' 


Por que, aliás, usar um pipeline com tantos passos? Você já está usando o awk, que é capaz de fazer a função para a qual você o chamou e também as dos seds que vêm depois.

De todo modo, se você quer simplesmente pegar a última ocorrência de linha começando com o texto “%%Title: ”, suprimindo esse prefixo, o seguinte comando basta.

awk '/^%%Title: / { origem=substr($0, 10) }  END { print origem }' 


Leia a documentação do awk. Para outras substituições na string, você talvez queira estudar as funções match(), gsub() e gensub().



Vou testar este comando e dou um retorno :D



6. Re: Buscar string em arquivo [RESOLVIDO]

Wagner Souza
wagnerfs

(usa Fedora)

Enviado em 09/11/2015 - 11:32h

Aqui eu fiz um teste só com o comando cut utilizando o delimitador ' ' (espaço em branco) e funcionou:



$ cut -d' ' -f2 teste
192.168.52.3:8000
Teste
henrique\857



Seira isso mesmo que você quer?
_________________________
Wagner F. de Souza
Técnico/Instrutor de Informática
"GNU/Linux for human beings."
LPI ID: LPI000297782



7. Re: Buscar string em arquivo [RESOLVIDO]

henrique
henriquew

(usa Ubuntu)

Enviado em 09/11/2015 - 12:08h

K666 escreveu:

Aqui eu fiz um teste só com o comando cut utilizando o delimitador ' ' (espaço em branco) e funcionou:



$ cut -d' ' -f2 teste
192.168.52.3:8000
Teste
henrique\857



Seira isso mesmo que você quer?
_________________________
Wagner F. de Souza
Técnico/Instrutor de Informática
"GNU/Linux for human beings."
LPI ID: LPI000297782


Por espaço não funciona amigo, neste caso "%%Title: Teste - Arquivo" vai dar erro porque não vai pegar toda a string e sim apenas "Teste"



8. Re: Buscar string em arquivo [RESOLVIDO]

Wagner Souza
wagnerfs

(usa Fedora)

Enviado em 09/11/2015 - 12:44h

Tem razão. Passei batido. Tenta isso aqui:

$ sed 's/.*\%%Title\://' teste 
192.168.52.3:8000
Teste - Arquivo
henrique\857

_________________________
Wagner F. de Souza
Técnico/Instrutor de Informática
"GNU/Linux for human beings."
LPI ID: LPI000297782







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts