Ce face opțiunea sed -i? (Programare, Unix, Sed, Linie De Comandă, Opțiune)

Allzhere a intrebat.

Depanez un script shell și încerc să aflu sarcina efectuată de următoarea comandă:

sed -i '1,+999d' /home/org_user/data.txt

Am nevoie să schimb această comandă deoarece nu reușește cu următoarea eroare:

illegal option sed -i

Dar, înainte de a schimba, trebuie să înțeleg funcționarea BAU.

Apreciez orice contribuții în această privință.

Comentarii

  • Cel mai probabil, această comandă utilizează implementarea GNU a comenzii sed. Ea poate fi replicată folosind majoritatea comenzilor sed care folosesc: sed '1,1000d' file >temp_file && mv temp_file file –  > Por potong.
  • Bună, Mulțumesc pentru contribuțiile dvs. și sunt de acord cu comanda pe care o indicați. Dar, puteți sugera, vă rog, ce anume face „1,+999d” aici. Am citit răspunsurile de mai jos și acestea sugerează că „ar trebui” să șteargă liniile de la 1 la 999. Cu toate acestea, vreau să fiu sigur de asta. –  > Por Allzhere.
  • ‘1,+999d’ în sed înseamnă că de la linia 1 la 1+999 linii se șterg. Fișierul rămas va fi mai puțin primele 1000 de linii. –  > Por potong.
  • Mulțumesc mult. Va trata scenariul într-un mod separat, deoarece opțiunea -i eșuează. Apreciez răspunsul prompt… 🙂 –  > Por Allzhere.
3 răspunsuri
Philip Kirkbride

O utilizare aplicabilă a acestui lucru este după cum urmează. Să spunem că aveți următorul fișier file.txt:

1, 2, 6, 7, "p" 

Vrem să înlocuim „p” cu 0.

sed 's/"p"/0/g' file.txt

Folosind cele de mai sus, pur și simplu se tipărește ieșirea în linia de comandă.

V-ați gândi de ce să nu redirecționați acel text înapoi în fișier, astfel:

sed 's/"p"/0/g' file.txt > file.txt

Din nefericire, din cauza naturii redirecționărilor, cele de mai sus vor produce pur și simplu un fișier gol.

În schimb, trebuie creat un fișier temporar pentru ieșire, care mai târziu va suprascrie fișierul original, ceva de genul acesta:

sed 's/"p"/0/g' file.txt > tmp.txt && mv tmp.txt file.txt

În loc de a face lunga rezolvare de mai sus, opțiunea sed edit in place cu -i permite o comandă mult mai simplă:

sed -i 's/"p"/0/g' file.txt

Comentarii

  • Îmi place foarte mult acest răspuns! –  > Por Hawkeye Parker.
falsetru

Dacă -i opțiunea dată, sed editează fișierele pe loc.

   -i[SUFFIX], --in-place[=SUFFIX]

          edit files in place (makes backup if extension supplied)

de la sed(1)

http://www.gnu.org/software/sed/manual/sed.html#Introduction

Comentarii

  • Răspunsul lui Philip Kirkbride oferă un exemplu util care explică mai bine ce înseamnă de fapt „editarea fișierelor pe loc” înseamnă. –  > Por Hawkeye Parker.
choroba

Unele implementări ale sed nu acceptă -i opțiunea. Ceea ce face aceasta poate fi simulat prin

sed -e '...' file > tmp
mv tmp file

Comentarii

  • Vă mulțumim pentru contribuții. Deci, aici, ‘1,+999d’ dă o eroare care spune „text confuz” . Această comandă șterge toate liniile din fișier ?? –  > Por Allzhere.
  • @Allzhere: Ar trebui să șteargă liniile de la 1 la 999. Nu sunt sigur că toate SD-urile acceptă comanda +. –  > Por choroba.
  • @choroba Șterge liniile de la 1 la 1+999=1000. Este, de asemenea, o extensie GNU. –  > Por tricasse.
  • @Allzhere Pentru a șterge toate liniile: 1,$d. –  > Por tricasse.