msoliver
(usa Debian)
Enviado em 18/11/2021 - 19:06h
jorgessn escreveu:
Boa tarde caro Oliver,
Eu quero que o comando apague a linha do arquivo users que contem a variavel userDelete mas não altere nada no arquivo antes da linha 10, apenas depois da linha 10.
Arquivo users é uma lista com apenas um usuário por linha e as 10 primeiras linhas não pode alterar.
Por exemplo, o arquivo contem 12 nomes:
system
finan
root
mail
adm1
adm2
adm3
adm4
adm5
adm6
adm7
finan
escoladoceencanto
sci
financeiro
contabil
repare que tem o usuário finan na linha 2 e depois da linha 10,
a variável contem o usuário finan mas o código só pode excluir após a linha 10, o finan da linha 2 não pode ser excluído.
Do jeito que esta o código não ta funcionando pois não remove nenhum dos usuarios finan e eu queria que ele removesse apenas o depois da linha 10.
Se eu usar o sed puro ele funciona mas ele apaga antes da linha 10 também.
Obrigado Oliver!
Boa noite Jorge.
Se quer deletar uma linha especifica com o "SED", use o endereço da mesma, que no caso é o Nº da linha.
Exemplo:
sed -i '12d;' arquivo
----------------------------------------------------------------------------------------------------------------
cat user.txt
system
finan
root
mail
adm1
adm2
adm3
adm4
adm5
adm6
finan
adm7
finan
escoladoceencanto
finan
sci
finan
financeiro
contabil
finan
----------------------------------------------------------------------------------------------------------------
Simulação:
Neste caso, tudo >10 && finan
Mostra o comando sed
criado pelo awk:
awk 'NR>10 && $0~/\<'$user'\>/{print "sed -i \""NR"d;\" user.txt";}' user.txt
sed -i "11d;" user.txt
sed -i "13d;" user.txt
sed -i "15d;" user.txt
sed -i "17d;" user.txt
sed -i "20d;" user.txt
Para limitar, caso tenha mais de uma ocorrência, coloque o "exit".
awk 'NR>10 && $0~/\<'$user'\>/ {print "sed -i \""NR"d;\" user.txt";exit}' user.txt
sed -i "11d;" user.txt
Excluindo :
awk 'NR>10 && $0~/\<'$user'\>/ {system("sed -i \""NR"d;\" user.txt");exit}' user.txt
Para "apagar" uma ocorrência especifica, use o count++ e o if:
awk 'NR>10 && $0~/\<'$user'\>/{c++;if(c==2) system("sed -i \""NR"d;\" user.txt");}' user.txt
É isso, espero que resolva.....
Note que no sed, usei o NR, que é o número da linha.....
______________________________________________________________________
Importante:
lynx --dump
https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando:
ACIMA , faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________