Usare sed per cancellare un'intera riga se contiene solo un numero specifico


8

Ho un file txt

123
456
789
456
123456

Voglio eliminare caratteri specifici dal file, ad esempio (123). Ci ho provato

$ sed -i '/123/d' dummy.sh
$ vi dumm.txt
456
789
456

Nel comando seguente quando eseguo entrambe le parole ( 123e 123456) vengono eliminate, ma devo eliminare solo 123dal file

$ sed -i 's/123//g' dummy.sh
$ vi dumm.txt
456
789
456
456

quando eseguo il comando seguente 123viene sostituito con null.

Qualcuno può dire come eliminare un'intera riga se contiene solo un numero specifico?


2
In una parola - ancore
steeldriver,

non ho ricevuto quello che mi stai chiedendo?
Rak kundra,

1
Si noti che, sebbene sia perfettamente corretto utilizzare sed per questa attività, grep è lo strumento creato appositamente per visualizzare o nascondere le linee di input corrispondenti allo schema. In questo caso il seguente comando grep farebbe lo stesso: grep -E -v '^ 123 $' dumm.txt
Gnudiff

4
@Gnudiff Non vedo alcun vantaggio grepse usi così. Ma può essere superiore per alcuni compiti a causa delle sue opzioni:grep -xv 123
Philippos

Risposte:


19

Non è chiaro se si sta tentando di eliminare l'intera riga con 123o sostituirla con una riga vuota. Ad ogni modo, aggiungi solo ancore di inizio ^e fine $della linea al tuo schema:

sed -i '/^123$/d' dummy.sh      #delete whole line
sed -i 's/^123$//' dummy.sh     #replace with empty line

Sì, ho ricevuto la mia risposta, grazie :). Sto cercando di eliminare l'intera riga qui.
Rak kundra,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.