|
From: | Julio C. Neves |
Subject: | Re: [shell-script] [ Sed ] - Append |
Date: | Sat, 8 Nov 2014 13:51:27 -0200 |
Olha essa linha de comando para imprimir somente uma, de duas ou mais linhas consecutivas e iguais:
$ sed '$!N; /^\(.*\)\n\1$/!P; D' ARQUIVO
Para entender vamos dividi-lo:
$!N Se for a última linha, não adicione ao Pattern Space;
/^\(.*\)\n\1$/ Aqui vamos dividir a explicação novamente:
^\(.*\)\n – Forma um grupo com o que está desde o início (^) até o \n (que separa as duas linhas no Pattern Space);
\1$ - O retrovisor que guardou o texto casado no grupo;
Desta forma, a Expressão Regular como um todo procurou no Pattern Space um texto, um \n e o mesmo texto, isto é, um texto repetido;
!P Neste caso, não imprima;
D Delete a primeira linha!
Vamos vê-lo atuando:
$ sed '$!N; /^\(.*\)\n\1$/!P; D' <<< '11111
> 22222
> 22222
> 33333
> 33333
> 33333'
11111
22222
33333
Que, para facilitar a legibilidade, também poderia ter sido escrito colocando cada um dos três comandos em uma linha e usando a opção -r (para Expressões Regulares estendidas como os parênteses) para evitar as contrabarras, ficando da seguinte forma:
$ sed -r '{
> $!N
> /^(.*)\n\1$/!P
> D
> }' <<< '11111
> 22222
> 22222
> 33333
> 33333
> 33333'
===============================================Rodrigo BoëchatAcredito que vá solucionar seu caso...No filtro de E.R. tente algo assim:Não testei, apenas li seu sed e percebi isso.Boa noite.Camarada, seu sed está executando para todas as linhas porque o filtro de expressão regular que você está insuficiente para pegar somente a linha que você precisa.
^alias abc=Em 7 de novembro de 2014 19:42, Gustavo Filgueiras address@hidden [shell-script] <address@hidden> escreveu:Quando eu gostaria que fosse assim, inserindo somente na última entrada:Após executar o comando fica assim:Caros,Estou com um pequeno problema no sed, eu até estou conseguindo adicionar uma linha no final daonde eu preciso, mas o problema é que ele faz isso para todas as entradas, e não apenas a última. Estou usando o seguinte comando:
sed '/alias/a linha depois' /root/.bashrc
Abaixo está o arquivo original:
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# .bashrc
# User specific aliases and functions
linha depois
alias rm='rm -i'
linha depois
alias cp='cp -i'
linha depois
alias mv='mv -i'
linha depois
alias abc='xe vm-shutdown --force uuid="$1"'
linha depois
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# .bashrc
# User specific aliases and functions
linha depois
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias abc='xe vm-shutdown --force uuid="$1"'
linha depois
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
[Prev in Thread] Current Thread [Next in Thread]
- [ Sed ] - Append, Gustavo Filgueiras, 2014/11/07
- Re: [shell-script] [ Sed ] - Append, Rodrigo Tenorio, 2014/11/07
- Re: [shell-script] [ Sed ] - Append, Gustavo Filgueiras, 2014/11/08
- Re: [ Sed ] - Append, itamarnet, 2014/11/08
- Re: [shell-script] Re: [ Sed ] - Append, Alfredo Casanova, 2014/11/08
- Re: [shell-script] Re: [ Sed ] - Append, Herbert Parentes Fortes Neto, 2014/11/08
- Re: [shell-script] [ Sed ] - Append, Julio C. Neves <=
- Re: [shell-script] [ Sed ] - Append, Gustavo Filgueiras, 2014/11/08
Re: [shell-script] [ Sed ] - Append, Paulo Bettega, 2014/11/09
- Prev by Date: Re: [shell-script] Re: [ Sed ] - Append
- Next by Date: Re: [shell-script] [ Sed ] - Append
- Previous by thread: Re: [shell-script] Re: [ Sed ] - Append
- Next by thread: Re: [shell-script] [ Sed ] - Append
- Index(es):