Discussion:
[shell-script] Escapando Colchetes na saída do ls
arkanadd@yahoo.com [shell-script]
2016-10-23 23:12:55 UTC
Permalink
Estou precisando comparar duas listas, mas os arquivos que possuem [] no nome não são encontrados. Tentei escapá-los, mas até o momento não encontrei a forma correta.
O código utilizado é o:


#!/bin/bash


exec 3< <(ls /home/cdva/)


while read arq <&3; do
var=`grep -e "$arq" ARQ02`
if [ "$?" -ne 0 ] ; then
echo "$arq" >> result
fi
done


exec 3<&-


Poderiam me auxiliar?
itamarnet@yahoo.com.br [shell-script]
2016-10-24 00:48:09 UTC
Permalink
Caro arkanadd

Estou supondo que no arquivo ARQ02 tem uma listagem de arquivos e diretórios, mas quer exibir apenas o que há a mais no que é recebido pelo file descriptor 3.

Para não ter problemas com os colchetes é bom usar o 'fgrep' ou 'grep -F', o uso de 'egrep', 'grep' com o argumento -e entende os colchetes como lista das RE.

Existe a opção de usar o 'grep -f' onde vc tem um arquivo com o padrões a serem procurados, e nisso vc não precisa fazer um loop:

fgrep -f <(cat <&3) ARQ02 > result


Outra opção é usar diff, onde não precisa fazer um loop também:

diff <(cat <&3) ARQ02 | sed -n '/^</{s/< //;p}' > result


Não cheguei a testar, mas acho que resolve

[]'s
Itamar
itamarnet@yahoo.com.br [shell-script]
2016-10-24 01:30:54 UTC
Permalink
Cometi uma falha no exemplo que dei para o fgrep

o certo para seu caso conforme entendi seria:

fgrep -v -f <(cat <&3) ARQ02 > result


[]'s
Itamar
Arkan Add arkanadd@yahoo.com [shell-script]
2016-10-26 18:22:23 UTC
Permalink
Obrigado pelas respostas Itamar.
     Realizei os testes e acabei utilizando o mesmo código, alterando somente o grep -e para grep -Fe.     Devido a quantidade de informação existente no ARQ02 achei mais fácil copiar a variável se o grep não a encontrasse. (Meus conhecimentos em Shell Script são bem limitados).     Agradeço pelas respostas.
Grato



On Sunday, October 23, 2016 11:31 PM, "***@yahoo.com.br [shell-script]" <shell-***@yahoogrupos.com.br> wrote:


  Cometi uma falha no exemplo que dei para o fgrep

o certo para seu caso conforme entendi seria:

fgrep -v -f <(cat <&3) ARQ02 > result


[]'s
Itamar #yiv2978005442 -- #yiv2978005442ygrp-mkp {border:1px solid #d8d8d8;font-family:Arial;margin:10px 0;padding:0 10px;}#yiv2978005442 #yiv2978005442ygrp-mkp hr {border:1px solid #d8d8d8;}#yiv2978005442 #yiv2978005442ygrp-mkp #yiv2978005442hd {color:#628c2a;font-size:85%;font-weight:700;line-height:122%;margin:10px 0;}#yiv2978005442 #yiv2978005442ygrp-mkp #yiv2978005442ads {margin-bottom:10px;}#yiv2978005442 #yiv2978005442ygrp-mkp .yiv2978005442ad {padding:0 0;}#yiv2978005442 #yiv2978005442ygrp-mkp .yiv2978005442ad p {margin:0;}#yiv2978005442 #yiv2978005442ygrp-mkp .yiv2978005442ad a {color:#0000ff;text-decoration:none;}#yiv2978005442 #yiv2978005442ygrp-sponsor #yiv2978005442ygrp-lc {font-family:Arial;}#yiv2978005442 #yiv2978005442ygrp-sponsor #yiv2978005442ygrp-lc #yiv2978005442hd {margin:10px 0px;font-weight:700;font-size:78%;line-height:122%;}#yiv2978005442 #yiv2978005442ygrp-sponsor #yiv2978005442ygrp-lc .yiv2978005442ad {margin-bottom:10px;padding:0 0;}#yiv2978005442 #yiv2978005442actions {font-family:Verdana;font-size:11px;padding:10px 0;}#yiv2978005442 #yiv2978005442activity {background-color:#e0ecee;float:left;font-family:Verdana;font-size:10px;padding:10px;}#yiv2978005442 #yiv2978005442activity span {font-weight:700;}#yiv2978005442 #yiv2978005442activity span:first-child {text-transform:uppercase;}#yiv2978005442 #yiv2978005442activity span a {color:#5085b6;text-decoration:none;}#yiv2978005442 #yiv2978005442activity span span {color:#ff7900;}#yiv2978005442 #yiv2978005442activity span .yiv2978005442underline {text-decoration:underline;}#yiv2978005442 .yiv2978005442attach {clear:both;display:table;font-family:Arial;font-size:12px;padding:10px 0;width:400px;}#yiv2978005442 .yiv2978005442attach div a {text-decoration:none;}#yiv2978005442 .yiv2978005442attach img {border:none;padding-right:5px;}#yiv2978005442 .yiv2978005442attach label {display:block;margin-bottom:5px;}#yiv2978005442 .yiv2978005442attach label a {text-decoration:none;}#yiv2978005442 blockquote {margin:0 0 0 4px;}#yiv2978005442 .yiv2978005442bold {font-family:Arial;font-size:13px;font-weight:700;}#yiv2978005442 .yiv2978005442bold a {text-decoration:none;}#yiv2978005442 dd.yiv2978005442last p a {font-family:Verdana;font-weight:700;}#yiv2978005442 dd.yiv2978005442last p span {margin-right:10px;font-family:Verdana;font-weight:700;}#yiv2978005442 dd.yiv2978005442last p span.yiv2978005442yshortcuts {margin-right:0;}#yiv2978005442 div.yiv2978005442attach-table div div a {text-decoration:none;}#yiv2978005442 div.yiv2978005442attach-table {width:400px;}#yiv2978005442 div.yiv2978005442file-title a, #yiv2978005442 div.yiv2978005442file-title a:active, #yiv2978005442 div.yiv2978005442file-title a:hover, #yiv2978005442 div.yiv2978005442file-title a:visited {text-decoration:none;}#yiv2978005442 div.yiv2978005442photo-title a, #yiv2978005442 div.yiv2978005442photo-title a:active, #yiv2978005442 div.yiv2978005442photo-title a:hover, #yiv2978005442 div.yiv2978005442photo-title a:visited {text-decoration:none;}#yiv2978005442 div#yiv2978005442ygrp-mlmsg #yiv2978005442ygrp-msg p a span.yiv2978005442yshortcuts {font-family:Verdana;font-size:10px;font-weight:normal;}#yiv2978005442 .yiv2978005442green {color:#628c2a;}#yiv2978005442 .yiv2978005442MsoNormal {margin:0 0 0 0;}#yiv2978005442 o {font-size:0;}#yiv2978005442 #yiv2978005442photos div {float:left;width:72px;}#yiv2978005442 #yiv2978005442photos div div {border:1px solid #666666;height:62px;overflow:hidden;width:62px;}#yiv2978005442 #yiv2978005442photos div label {color:#666666;font-size:10px;overflow:hidden;text-align:center;white-space:nowrap;width:64px;}#yiv2978005442 #yiv2978005442reco-category {font-size:77%;}#yiv2978005442 #yiv2978005442reco-desc {font-size:77%;}#yiv2978005442 .yiv2978005442replbq {margin:4px;}#yiv2978005442 #yiv2978005442ygrp-actbar div a:first-child {margin-right:2px;padding-right:5px;}#yiv2978005442 #yiv2978005442ygrp-mlmsg {font-size:13px;font-family:Arial, helvetica, clean, sans-serif;}#yiv2978005442 #yiv2978005442ygrp-mlmsg table {font-size:inherit;font:100%;}#yiv2978005442 #yiv2978005442ygrp-mlmsg select, #yiv2978005442 input, #yiv2978005442 textarea {font:99% Arial, Helvetica, clean, sans-serif;}#yiv2978005442 #yiv2978005442ygrp-mlmsg pre, #yiv2978005442 code {font:115% monospace;}#yiv2978005442 #yiv2978005442ygrp-mlmsg * {line-height:1.22em;}#yiv2978005442 #yiv2978005442ygrp-mlmsg #yiv2978005442logo {padding-bottom:10px;}#yiv2978005442 #yiv2978005442ygrp-msg p a {font-family:Verdana;}#yiv2978005442 #yiv2978005442ygrp-msg p#yiv2978005442attach-count span {color:#1E66AE;font-weight:700;}#yiv2978005442 #yiv2978005442ygrp-reco #yiv2978005442reco-head {color:#ff7900;font-weight:700;}#yiv2978005442 #yiv2978005442ygrp-reco {margin-bottom:20px;padding:0px;}#yiv2978005442 #yiv2978005442ygrp-sponsor #yiv2978005442ov li a {font-size:130%;text-decoration:none;}#yiv2978005442 #yiv2978005442ygrp-sponsor #yiv2978005442ov li {font-size:77%;list-style-type:square;padding:6px 0;}#yiv2978005442 #yiv2978005442ygrp-sponsor #yiv2978005442ov ul {margin:0;padding:0 0 0 8px;}#yiv2978005442 #yiv2978005442ygrp-text {font-family:Georgia;}#yiv2978005442 #yiv2978005442ygrp-text p {margin:0 0 1em 0;}#yiv2978005442 #yiv2978005442ygrp-text tt {font-size:120%;}#yiv2978005442 #yiv2978005442ygrp-vital ul li:last-child {border-right:none !important;}#yiv2978005442
itamarnet@yahoo.com.br [shell-script]
2016-10-26 22:11:07 UTC
Permalink
Aran Add

Que bom que a opção -F foi suficiente.

Não sei a gama de registros que possui no arquivo citado, mas fazendo um loop seja usando "while" ou "for" vc acaba lendo o arquivo linha a linha, e fazendo uma chamada ao grep em cada uma delas na forma que está.

O grep dá a possibilidade de fazer isso com apenas uma chamada onde ele lê uma arquivo com o pattern e o arquivo a ser pesquisado.

Só para exempificar, refiz um antigo procedimento onde comparava 2 arquivos com números primos, onde cada número primo era único por linha, Uma primeira listagem com 10.000 números e outra com quase 150.000 números e a resposta demorou menos de um segundo em um micro bem antigo.

Acredito que usar a forma que sugeri poderia economizar muito tempo.

Mas é apenas uma sugestão, e o intuito é que considere essa solução numa próxima oportunidade.

[]'s
Itamar

Loading...