[Risolto] eliminare riga di testo da file testo con shell

Linguaggi di programmazione: php, perl, python, C, bash, ecc.

[Risolto] eliminare riga di testo da file testo con shell

Messaggioda JordanDunk » venerdì 12 maggio 2017, 11:10

Buongiorno a tutti, sto cercando di scrivere uno script che dato in input il nome di un utente lo script mi cancella tutta la riga in cui si trova in nome utente passato in input. Mi spiego meglio: ho il seguente file di testo :

Aragon:ilritornodelre:12:1000:il legittimo re:/home/aragon:/bin/bash
Gimmly:777888999:66:800:moria mia:/home/gimmly:/bin/bash
Legolas:odioinani:99:42:biondo arco:/home/legolas:/bin/bash
Frodo:pass111:23:1000:il portatore:/home/frodo:/bin/bash
Gollum:19191919:200:67:il mio tessssoro:/home/Gollum:/bin/bash
Sauron:unanelloperdomarli:10:20:the boss of the montefato:/home/Sauron/:/bin/bash
Aragon 2:aragonpass:13:32:the secret account of Aragon:/home/private/aragonhide/:/bin/hidebash

In input se scrivo Aragon oppure Gimmly, Legolas, Frodo etc.. vorrei che il mio script eliminasse tutta la riga di informazioni riguardo quell'utente. es:
se scrivo Gollum vorrei che dopo il file di testo apparisse cosi:

Aragon:ilritornodelre:12:1000:il legittimo re:/home/aragon:/bin/bash
Gimmly:777888999:66:800:moria mia:/home/gimmly:/bin/bash
Legolas:odioinani:99:42:biondo arco:/home/legolas:/bin/bash
Frodo:pass111:23:1000:il portatore:/home/frodo:/bin/bash
Sauron:unanelloperdomarli:10:20:the boss of the montefato:/home/Sauron/:/bin/bash
Aragon 2:aragonpass:13:32:the secret account of Aragon:/home/private/aragonhide/:/bin/hidebash

Ho letto un sacco di guide ma non ho trovato niente che mi possa aiutare :(
Grazie per la disponibilità :)
:ciao: :ciao: :ciao:
Ultima modifica di JordanDunk il martedì 16 maggio 2017, 11:31, modificato 1 volta in totale.
JordanDunk
Prode Principiante
 
Messaggi: 45
Iscrizione: aprile 2017
Desktop: Ubuntu
Distribuzione: Ubunto 16.10 | x86_64
Sesso: Maschile

Re: eliminare una riga di testo da un file di testo con shel

Messaggioda UbuNuovo » venerdì 12 maggio 2017, 13:52

Se facevi una ricerca... :)
viewtopic.php?f=33&t=620983
Quasi lo stesso titolo.

Ma state facendo gli stessi esercizi? :mumble:
Nel caso in cui sia il primo a rispondere ad una richiesta di aiuto...chiunque abbia una soluzione migliore o anche solo diversa dalla mia è incoraggiato ad intervenire liberamente senza inviarmi alcun messaggio privato. In programmazione è basilare sapere che si può ottenere il medesimo risultato utilizzando metodi diversi.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 2801
Iscrizione: dicembre 2009
Desktop: Mate
Distribuzione: Ubuntu 14.04
Sesso: Maschile

Re: eliminare una riga di testo da un file di testo con shel

Messaggioda Gerry Ghetto » venerdì 12 maggio 2017, 19:55

Più o meno:
Codice: Seleziona tutto
#!/usr/bin/perl -w

use strict;

my $n;
my $r;
my @r;
my @o;

print "nome : ";
$n = <STDIN>;
chomp($n);

open(R, "dati.txt")
  or die "Errore 1: $!\n";

@r = <R>;

close(R)
  or die "Errore 2: $!\n";

foreach $r(@r) {
  if($r !~ /^$n:/) {
    push @o,$r;
  };
};

open(W, "> dati.txt")
  or die "Errore 3: $!\n";

foreach $r(@o) { print W $r; };

close(W)
  or die "Errore 4: $!\n";
Scusate il mio italiano. Non è la mia madrelingua.
forum.ubuntu-it.org - il peggior forum che conosco
Gerry Ghetto
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1265
Iscrizione: marzo 2015

Re: eliminare una riga di testo da un file di testo con shel

Messaggioda JordanDunk » lunedì 15 maggio 2017, 17:02

UbuNuovo Immagine ha scritto:Se facevi una ricerca... :)
viewtopic.php?f=33&t=620983
Quasi lo stesso titolo.

Ma state facendo gli stessi esercizi? :mumble:


ma sono sempre io quello :) è che ora ho ripreso la domanda ma formulata meglio. Tu sapresti aiutarmi?
JordanDunk
Prode Principiante
 
Messaggi: 45
Iscrizione: aprile 2017
Desktop: Ubuntu
Distribuzione: Ubunto 16.10 | x86_64
Sesso: Maschile

Re: eliminare una riga di testo da un file di testo con shel

Messaggioda JordanDunk » lunedì 15 maggio 2017, 17:03

UbuNuovo Immagine ha scritto:Se facevi una ricerca... :)
viewtopic.php?f=33&t=620983
Quasi lo stesso titolo.

Ma state facendo gli stessi esercizi? :mumble:


ma sono sempre io quello :) è che ora ho ripreso la domanda ma formulata meglio. Tu sapresti aiutarmi?
JordanDunk
Prode Principiante
 
Messaggi: 45
Iscrizione: aprile 2017
Desktop: Ubuntu
Distribuzione: Ubunto 16.10 | x86_64
Sesso: Maschile

Re: eliminare una riga di testo da un file di testo con shel

Messaggioda UbuNuovo » lunedì 15 maggio 2017, 19:22

JordanDunk Immagine ha scritto:...
ma sono sempre io quello :)

:lol: Mi sembrava di aver guardato il nick ... sono guercio! :muro:
Potresti fare una cosa di questo tipo:
Codice: Seleziona tutto
file_dati='file_dati.txt'
echo 'Inserire il nome presente nlla riga da eliminare e premer "Invio"'
read nome
if grep -q "^$nome:" "$file_dati"
   then
      echo "c'è"
      sed -i "/$nome/d" "$file_dati"
   else
      echo "Attenzione! Non esiste una riga con nome $nome."
fi

Semmai inserisci il codice di inserimento in una funzione che richiami in caso di errore.
Magari metti qualche controllo.
Al posto di 'sed -i' puoi usare 'grep -v' ma devi salvare su un file temporaneo.
Nel caso in cui sia il primo a rispondere ad una richiesta di aiuto...chiunque abbia una soluzione migliore o anche solo diversa dalla mia è incoraggiato ad intervenire liberamente senza inviarmi alcun messaggio privato. In programmazione è basilare sapere che si può ottenere il medesimo risultato utilizzando metodi diversi.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 2801
Iscrizione: dicembre 2009
Desktop: Mate
Distribuzione: Ubuntu 14.04
Sesso: Maschile

Re: eliminare una riga di testo da un file di testo con shel

Messaggioda JordanDunk » martedì 16 maggio 2017, 10:17

Annnn, grazie mille :)
Però se guardi nel file io ho Aragon e Aragon 2. Se nello script scrivo Aragon mi cancella anche Aragon 2 :) come potrei risolverlo? scrivendo i due punti alla fine?
es: Aragon: ??
JordanDunk
Prode Principiante
 
Messaggi: 45
Iscrizione: aprile 2017
Desktop: Ubuntu
Distribuzione: Ubunto 16.10 | x86_64
Sesso: Maschile

Re: eliminare una riga di testo da un file di testo con shel

Messaggioda JordanDunk » martedì 16 maggio 2017, 10:19

Poi potresti spiegarmi la riga di comando sed -i "/$nome/d" "$file_dati"
grazie :)
JordanDunk
Prode Principiante
 
Messaggi: 45
Iscrizione: aprile 2017
Desktop: Ubuntu
Distribuzione: Ubunto 16.10 | x86_64
Sesso: Maschile

Re: eliminare una riga di testo da un file di testo con shel

Messaggioda UbuNuovo » martedì 16 maggio 2017, 10:39

Dimenticanza! Ho fatto la regex più specifica per grep ma non per sed, puoi usare la stessa regex.
Codice: Seleziona tutto
sed -i "/^$nome:/d" "$file_dati"


La '-i' di sed dice di eseguire l'azione specificata direttamente sul file (in realtà anche sed crea un file temporaneo di passaggio).
'/^$nome:/' Indica una regex, la riga deve iniziare (^) con la stringa contenuta nella variabile "$nome" a sua volta seguita dai due punti (:)
'\d' dice a sed di cancellare la riga che rispetta la corrispondenza della regex.
Nel caso in cui sia il primo a rispondere ad una richiesta di aiuto...chiunque abbia una soluzione migliore o anche solo diversa dalla mia è incoraggiato ad intervenire liberamente senza inviarmi alcun messaggio privato. In programmazione è basilare sapere che si può ottenere il medesimo risultato utilizzando metodi diversi.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 2801
Iscrizione: dicembre 2009
Desktop: Mate
Distribuzione: Ubuntu 14.04
Sesso: Maschile

Re: eliminare una riga di testo da un file di testo con shel

Messaggioda JordanDunk » martedì 16 maggio 2017, 11:31

perfetto grazie mille per la disponibilità :)
JordanDunk
Prode Principiante
 
Messaggi: 45
Iscrizione: aprile 2017
Desktop: Ubuntu
Distribuzione: Ubunto 16.10 | x86_64
Sesso: Maschile

Re: eliminare una riga di testo da un file di testo con shel

Messaggioda UbuNuovo » martedì 16 maggio 2017, 12:10

Di niente. :)
La prossima volta non aprire due discussioni sullo stesso argomento.
Ora hai da studiarti, regex e sed. :D
Ciaux
Nel caso in cui sia il primo a rispondere ad una richiesta di aiuto...chiunque abbia una soluzione migliore o anche solo diversa dalla mia è incoraggiato ad intervenire liberamente senza inviarmi alcun messaggio privato. In programmazione è basilare sapere che si può ottenere il medesimo risultato utilizzando metodi diversi.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 2801
Iscrizione: dicembre 2009
Desktop: Mate
Distribuzione: Ubuntu 14.04
Sesso: Maschile


Torna a Programmazione

Chi c’è in linea

Visualizzano questa sezione: emmanuel, Yahoo [Bot] e 8 ospiti