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

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
JordanDunk
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

Messaggio da JordanDunk »

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.
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

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? :mumble:
Salva l'Ucraina! 🇺🇦
Gerry Ghetto

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

Messaggio da Gerry Ghetto »

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";
JordanDunk
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

Messaggio da JordanDunk »

ma sono sempre io quello :) è che ora ho ripreso la domanda ma formulata meglio. Tu sapresti aiutarmi?
JordanDunk
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

Messaggio da JordanDunk »

ma sono sempre io quello :) è che ora ho ripreso la domanda ma formulata meglio. Tu sapresti aiutarmi?
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

: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.
Salva l'Ucraina! 🇺🇦
JordanDunk
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

Messaggio da JordanDunk »

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: 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

Messaggio da JordanDunk »

Poi potresti spiegarmi la riga di comando sed -i "/$nome/d" "$file_dati"
grazie :)
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

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.
Salva l'Ucraina! 🇺🇦
JordanDunk
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

Messaggio da JordanDunk »

perfetto grazie mille per la disponibilità :)
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

Di niente. :)
La prossima volta non aprire due discussioni sullo stesso argomento.
Ora hai da studiarti, regex e sed. :D
Ciaux
Salva l'Ucraina! 🇺🇦
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 14 ospiti