Co robi sed -i „1d”?

28

Rozumiem, że sedto polecenie do manipulowania plikiem tekstowym.

Z mojego Googlinga wydaje się, że -ioznacza to wykonanie operacji na samym pliku, czy to prawda?

Co '1d'?

Jérôme Verstrynge
źródło

Odpowiedzi:

43

W sed:

  • -i opcja edytuje plik wejściowy w miejscu

  • '1d' usunie pierwszy wiersz pliku wejściowego

Przykład:

% cat file.txt 
foo
bar

% sed -i '1d' file.txt 

% cat file.txt        
bar

Pamiętaj, że przez większość czasu dobrym pomysłem jest zrobienie kopii zapasowej podczas korzystania z tej -iopcji, aby mieć kopię zapasową oryginalnego pliku na wypadek nieoczekiwanej zmiany.

Na przykład, jeśli wykonasz:

sed -i.orig '1d' file.txt 

oryginalny plik zostanie zachowany jako file.txt.origplik zmodyfikowany file.txt.

heemayl
źródło
4
Możesz także wykonać „rozruch próbny” bez uprzedniego -isprawdzenia, co się stanie, a następnie użyć -ido zmiany pliku.
Baard Kopperud
15

1. a)

sed '1d' file.txt

Drukuje zawartość file.txt; z wyłączeniem pierwszej linii; na standardowe wyjście.


2. a)

sed -i    '1d' file.txt # GNU, NetBSD, OpenBSD
sed -i '' '1d' file.txt # FreeBSD, macOS

Drukuje zawartość file.txt; z wyłączeniem pierwszej linii; z powrotem w file.txt; nadpisywanie oryginału.


2. b)

sed -i.back '1d' file.txt

Tworzy kopię zapasową oryginału (as file.txt.back) przed dokonaniem zmian. Z wyjątkiem FreeBSD sedsufiks (tutaj .back) musi być dołączony do -iopcji (w tym samym argumencie, bez spacji między -ii .back).


3. a)

sed '2d' file.txt

Drukuje zawartość file.txt; z wyłączeniem drugiej linii; na standardowe wyjście.
(Podanie dowolnej liczby spowoduje usunięcie odpowiedniej linii).

Kompatybilny również z -iflagą.


3. b)

sed '1!d' file.txt

Drukuje zawartość file.txt; z wyłączeniem wszystkich oprócz pierwszej linii; na standardowe wyjście.
(Innymi słowy; drukowany jest tylko pierwszy wiersz).

Kompatybilny również z -iflagą.


3. c)

sed '$d' file.txt

Drukuje zawartość file.txt; z wyłączeniem ostatniej linii; na standardowe wyjście.

Kompatybilny również z -iflagą.

głosy
źródło
FYI: Wersja BSD (tj. De facto standard macOS) zazwyczaj nie będzie współpracować, chyba że utworzysz kopię zapasową (2. b) lub użyjesz metody obejścia kopii zapasowej (2. c). Wersja GNU nie poprosi cię o to. Będzie to destrukcyjnie edytować i zastępować istniejące pliki bez wahania.
głosy
4

W sed -hmają:

  -i[SUFFIX], --in-place[=SUFFIX]
             edit files in place (makes backup if SUFFIX supplied)

i „wykonaj operację na samym pliku”. absolutnie to.

I manpowiedział: „Sed jest edytorem strumieniowym. Do wykonywania podstawowych przekształceń tekstu w strumieniu wejściowym (pliku lub danych wejściowych z potoku) służy edytor strumieni. ”

jako twoje pytanie

sed -i '1d' file_name

oznacza: usuń pierwszy wiersz w pliku "file_name"na miejscu i wykonaj kopię zapasową do pliku. (podobnie jak edytowanie pliku i usuwanie pierwszego wiersza bezpośrednio).

Se ven
źródło