Brug ' sed ' til at finde og erstatte [duplikat]

Dette spørgsmål har allerede svar her :

Kommentarer

Svar

sed er s tream ed itor , ved at du kan bruge | (pipe) til at sende standard streams (specifikt STDIN og STDOUT) gennem sed og ændrer dem programmatisk på farten, hvilket gør det til et praktisk værktøj i Unix-filosofitraditionen; men kan også redigere filer direkte ved hjælp af -i -parameteren nævnt nedenfor.
Overvej følgende :

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

s/ bruges til at s udskifte det fundne udtryk few med asd:

De få, de modige.


Den asd , de modige.

/g står for “global”, hvilket betyder at gøre dette for hele linjen. Hvis du slipper /g (med s/few/asd/, skal der altid være tre skråstreg uanset hvad) og few vises to gange på samme linje, kun den første few ændres til asd:

De få mænd, de få kvinder, de modige.


De asd mænd, de få kvinder, de modige.

Dette er nyttigt under visse omstændigheder, som f.eks. at ændre specialtegn i begyndelsen af linjer (for eksempel at erstatte de større symboler end nogle bruger til at citere tidligere materiale i e-mail-tråde med en vandret fane, mens du efterlader en citeret algebraisk ulighed senere på linjen uberørt), men i dit eksempel, hvor du angiver, at hvor som helst few, skal den erstattes , sørg for at have /g.

Følgende to muligheder (flag) kombineres til en, :

-i -indstillingen bruges til at redigere i n sted på filen hello.txt.

-e indstillingen angiver e xpression / kommando, der skal køres, i dette tilfælde s/.

Bemærk: Det er vigtigt, at du bruger -i -e til at søge / erstatte. Hvis du gør -ie, opretter du en sikkerhedskopi af hver fil med bogstavet “e”.

Kommentarer

  • Jeg ' bruger OS X, for hvad det ' er værd, men det er den fejl, jeg får: sed: 1: " hello.txt ": ugyldig kommandokode.
  • En redigering blev foreslået for at tilføje -e flag til sed. Flagget -e er valgfrit, så længe kommandoen til udførelse vises først, der er ikke en kommandofil og en kommandaarg, og der er kun en kommando.
  • @roo på mac os x ved hjælp af -ie Jeg får den fil foo er backup-ed som fooe.
  • denne kommando giver mig en ekstra fil, der slutter med -e, hvorfor ??: index.html-e sed -i -e ' s / n / d / g ' index.html
  • På Mac opretter -i -e en ny fil med -e tilføjet til navnet. Dette ser ud til at fungere i bash: sed " -i " " " " -e " " s / få / asd / g " " en fil.xml "

Svar

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

g: Global

s: erstatning

-i : realtime fungerer med filen inplace

Kommentarer

  • Når det drejer sig om symlinks, er det godt at tilføje --follow-symlinks ellers vil -i omdanne symlink til en (redigeret) kopi af filen.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *