Gebruik ' sed ' om [duplicate]

Deze vraag heeft hier al antwoorden :

Reacties

Antwoord

sed is de s stroom ed itor , in die zin dat u | (pipe) kunt gebruiken om standaard streams te verzenden (STDIN en STDOUT specifiek) via sed en verander ze direct programmatisch, waardoor het een handig hulpmiddel is in de Unix-filosofietraditie; maar kan bestanden ook rechtstreeks bewerken met de parameter -i die hieronder wordt vermeld.
Overweeg het volgende :

 sed -i -e "s/few/asd/g" hello.txt  

s/ wordt gebruikt om s de gevonden uitdrukking few te vervangen door asd:

De weinigen, de moedigen.


De asd , de dapperen.

/g staat voor “global”, wat betekent dat dit voor de hele regel moet worden gedaan. Als je de /g (met s/few/asd/ weglaat, moeten er altijd drie schuine strepen zijn, wat er ook gebeurt) en few komt twee keer voor op dezelfde regel, alleen de eerste few is gewijzigd in asd:

De paar mannen, de weinige vrouwen, de moedigen.


De asd-mannen, de paar vrouwen, de moedigen.

Dit is handig in sommige omstandigheden, zoals het wijzigen van speciale tekens aan het begin van regels (bijvoorbeeld het vervangen van de groter-dan-symbolen die sommige mensen gebruiken om eerder materiaal in e-mailthreads te citeren met een horizontale tab terwijl een geciteerde algebraïsche ongelijkheid later in de regel onaangeroerd blijft), maar in uw voorbeeld waarin u specificeert dat overal few voorkomt, moet deze worden vervangen , zorg ervoor dat je /g hebt.

De volgende twee opties (vlaggen) worden gecombineerd tot één, :

-i optie wordt gebruikt om i n plaats in het bestand hello.txt.

-e optie geeft de e xpression / commando om uit te voeren, in dit geval s/.

Opmerking: het is belangrijk dat u -i -e gebruikt om te zoeken / vervangen. Als je -ie doet, maak je een back-up van elk bestand met de letter “e” eraan toegevoegd.

Opmerkingen

  • Ik ' m gebruik OS X, voor wat dat ' waard is, maar dit is de fout die ik krijg: sed: 1: " hello.txt ": ongeldige opdrachtcode.
  • Er is een bewerking voorgesteld om de -e toe te voegen vlag naar sed. De vlag -e is optioneel zolang het uit te voeren commando eerst verschijnt, er is geen commandobestand en een commando arg, en er is maar één commando.
  • @roo op mac os x, met -ie Ik krijg dat bestand foo is geback-upt als fooe.
  • dit commando geeft me een extra bestand dat eindigt op -e, waarom ??: index.html-e sed -i -e ' s / n / d / g ' index.html
  • Op Mac maakt -i -e een nieuw bestand aan met -e toegevoegd aan de naam. Dit lijkt te werken in bash: sed " -i " " " " -e " " enkele / asd / g " " een bestand.xml "

Antwoord

sed -i "s/fea/asd/g" hello.txt 

g: Globaal

s: vervanger

-i : realtime werkt met bestand inplace

Reacties

  • Bij het omgaan met symlinks is het goed om --follow-symlinks anders verandert -i de symlink in een (bewerkte) kopie van het bestand.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *