Shell eine Zeile löschen?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Das geht in einer Zeile mit der Shell (aber nur, wenn $zahl wirklich mindestens einmal in $file enthalten ist):

sed -i -e `grep -n "^$zahl *" $file | cut -d: -f1 | head -1`d $file
Hier ein Script in der Sprache  tcl 
Tcl installieren die Zeilen in eine Datei kopieren, die Datei ausführbar machen ( chmod 755 <datei-Name> ) und starten / ./datei-Name <Datei mit den Zahlen>  <die Zahl> 



#!/bin/bash
# \exec tclsh "$0" "$@"
puts "### Benutzung: $argv0 <Datei-Name> <Zahl> "
puts "###    aus <Datei> wird die angegeben Zahl entfernt, wenn sie mehrfach vorhanden ist\n"

if { ![file exist [lindex $argv 0 ] ] } { puts "Datei [lindex $argv 0 ]nicht vorhanden" ; exit }

if { [lindex $argv 1] == "" || ![string is integer [lindex $argv 1 ]] } { puts " der 2. Paramemeter ist keine Zahl" ; exit }

set fpi [open [lindex $argv 0 ] r ] 
set fpo [open .#[lindex $argv 0 ] w ]
set flag 0
while { ![eof $fpi ] } { set line [ gets $fpi ]
                        if { $line != [lindex $argv 1 ] } { puts $fpo $line ; continue }
                        if { $flag == "0" } { puts $fpo $line }
                        incr flag 
                       }
close $fpo 
close $fpi
file rename -force .#[lindex $argv 0 ] [lindex $argv 0 ] 
puts " $flag mal wurde die Zahl \"[lindex $argv 1 ]\" gefunden "
Woher ich das weiß:Berufserfahrung – openSuSE seit 1995

Ich denke, dass das hier ganz nützlich sein könnte.

Alternativ mit Python:

with open('data.txt', 'r') as file:
	lines = [line.rstrip() for line in file.readlines()]
filter_for = '12'
lines.remove(filter_for)
print('\n'.join(lines))