2013-03-14 10 views
6

Wykonuję skrypt śledzenia spotkań w Bourne Shell i muszę usunąć spotkanie z pliku tekstowego. Jak usunąć linię z pliku, nie pozostawiając białego spacji, jeśli mam numer linii? Plik wygląda następująco:Usuń linię z pliku pod określonym numerem linii w powłoce Bourne'a

1:19:2013:Saturday:16.00:20.30:Poker 
1:24:2013:Thursday:11.00:11.45:Project meeting 
1:24:2013:Thursday:14.00:15.10:CSS Meeting 

Odpowiedz

17

Aby usunąć linię 5, wykonaj następujące czynności:

sed -i '5d' file.txt 

dla zmiennej liczby linia:

sed -i "${line}d" file.txt 

Jeśli opcja -i nie jest dostępny w Twoim smak sed, możesz emulować go w pliku tymczasowym:

sed "${line}d" file.txt > file.tmp && mv file.tmp file.txt 
+1

POSIX sed nie obsługuje sed -i. Ponieważ używamy tutaj Bourne'a, istnieje możliwość, że nie jest to Linux. Nie będzie działać na przykład w Solaris/usr/bin/sed. FWIW. –

+0

@jimmcnamara Dobry punkt. Zaktualizowano dodatkową odpowiedź inną niż "i". –

+0

Sprawdziło się doskonale, dziękuję. – user1731199

0

Oto szybki numerek za pomocą awk:

lineToDelete=$1 
awk "NR != $lineToDelete" 
+0

Nie powoduje to usunięcia linii z pliku. Drukuje plik do STDOUT, z wyjątkiem tego wiersza. – mivk

2

Aby usunąć przez appointement (wiersz) Numer:

sed -i '3d' input 

Aby usunąć z nazwy:

sed -i '/:Poker/d' input 

Jeżeli w miejscu (-i) Opcja nie działa w twoim systemie, możesz:

sed '/:Poker/d' input > input.tmp && mv input.tmp input 
+0

POSIX sed nie obsługuje sed -i. Ponieważ używamy tutaj Bourne'a, istnieje możliwość, że nie jest to Linux. Nie będzie działać na przykład w Solaris/usr/bin/sed. –

Powiązane problemy