[Risolto] eliminare riga di testo da file testo con shell
-
- Prode Principiante
- Messaggi: 55
- Iscrizione: lunedì 24 aprile 2017, 15:48
- Desktop: Ubuntu
- Distribuzione: Ubunto 16.10 | x86_64
- Sesso: Maschile
[Risolto] eliminare riga di testo da file testo con shell
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:12il 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:23il 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:12il 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:23il 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à
Aragon:ilritornodelre:12il 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:23il 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:12il 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:23il 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à
Ultima modifica di JordanDunk il martedì 16 maggio 2017, 11:31, modificato 1 volta in totale.
- UbuNuovo
- Imperturbabile Insigne
- Messaggi: 4433
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: eliminare una riga di testo da un file di testo con shel
Se facevi una ricerca...
http://forum.ubuntu-it.org/viewtopic.php?f=33&t=620983
Quasi lo stesso titolo.
Ma state facendo gli stessi esercizi?
http://forum.ubuntu-it.org/viewtopic.php?f=33&t=620983
Quasi lo stesso titolo.
Ma state facendo gli stessi esercizi?
Salva l'Ucraina!
Re: eliminare una riga di testo da un file di testo con shel
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";
-
- Prode Principiante
- Messaggi: 55
- Iscrizione: lunedì 24 aprile 2017, 15:48
- Desktop: Ubuntu
- Distribuzione: Ubunto 16.10 | x86_64
- Sesso: Maschile
Re: eliminare una riga di testo da un file di testo con shel
ma sono sempre io quello è che ora ho ripreso la domanda ma formulata meglio. Tu sapresti aiutarmi?UbuNuovo [url=http://forum.ubuntu-it.org/viewtopic.php?p=4981462#p4981462][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Se facevi una ricerca...
http://forum.ubuntu-it.org/viewtopic.php?f=33&t=620983
Quasi lo stesso titolo.
Ma state facendo gli stessi esercizi?
-
- Prode Principiante
- Messaggi: 55
- Iscrizione: lunedì 24 aprile 2017, 15:48
- Desktop: Ubuntu
- Distribuzione: Ubunto 16.10 | x86_64
- Sesso: Maschile
Re: eliminare una riga di testo da un file di testo con shel
ma sono sempre io quello è che ora ho ripreso la domanda ma formulata meglio. Tu sapresti aiutarmi?UbuNuovo [url=http://forum.ubuntu-it.org/viewtopic.php?p=4981462#p4981462][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Se facevi una ricerca...
http://forum.ubuntu-it.org/viewtopic.php?f=33&t=620983
Quasi lo stesso titolo.
Ma state facendo gli stessi esercizi?
- UbuNuovo
- Imperturbabile Insigne
- Messaggi: 4433
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: eliminare una riga di testo da un file di testo con shel
Mi sembrava di aver guardato il nick ... sono guercio!JordanDunk [url=http://forum.ubuntu-it.org/viewtopic.php?p=4982266#p4982266][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:...
ma sono sempre io quello
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
Magari metti qualche controllo.
Al posto di 'sed -i' puoi usare 'grep -v' ma devi salvare su un file temporaneo.
Salva l'Ucraina!
-
- Prode Principiante
- Messaggi: 55
- Iscrizione: lunedì 24 aprile 2017, 15:48
- Desktop: Ubuntu
- Distribuzione: Ubunto 16.10 | x86_64
- Sesso: Maschile
Re: eliminare una riga di testo da un file di testo con shel
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: ??
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: ??
-
- Prode Principiante
- Messaggi: 55
- Iscrizione: lunedì 24 aprile 2017, 15:48
- Desktop: Ubuntu
- Distribuzione: Ubunto 16.10 | x86_64
- Sesso: Maschile
Re: eliminare una riga di testo da un file di testo con shel
Poi potresti spiegarmi la riga di comando sed -i "/$nome/d" "$file_dati"
grazie
grazie
- UbuNuovo
- Imperturbabile Insigne
- Messaggi: 4433
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: eliminare una riga di testo da un file di testo con shel
Dimenticanza! Ho fatto la regex più specifica per grep ma non per sed, puoi usare la stessa regex.
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.
Codice: Seleziona tutto
sed -i "/^$nome:/d" "$file_dati"
'/^$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.
Salva l'Ucraina!
-
- Prode Principiante
- Messaggi: 55
- Iscrizione: lunedì 24 aprile 2017, 15:48
- Desktop: Ubuntu
- Distribuzione: Ubunto 16.10 | x86_64
- Sesso: Maschile
Re: eliminare una riga di testo da un file di testo con shel
perfetto grazie mille per la disponibilità
- UbuNuovo
- Imperturbabile Insigne
- Messaggi: 4433
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: eliminare una riga di testo da un file di testo con shel
Di niente.
La prossima volta non aprire due discussioni sullo stesso argomento.
Ora hai da studiarti, regex e sed.
Ciaux
La prossima volta non aprire due discussioni sullo stesso argomento.
Ora hai da studiarti, regex e sed.
Ciaux
Salva l'Ucraina!
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 11 ospiti