Använd ' sed ' för att hitta och ersätta [duplikat]

<åt sidan class = "s-notice s-notice__info js-post-notice mb16" role = "status">

Denna fråga har redan svar här :

Kommentarer

Svar

sed är s tream ed itor , genom att du kan använda | (pipe) för att skicka standardströmmar (STDIN och STDOUT specifikt) genom sed och ändra dem programmatiskt i farten, vilket gör det till ett praktiskt verktyg i Unix-filosofitraditionen; men kan också redigera filer direkt med -i -parametern som nämns nedan.
Tänk på följande :

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

s/ används för att s ersätta det hittade uttrycket few med asd:

De få, de modiga.


The asd , de modiga.

/g står för ”global”, vilket betyder att göra detta för hela linjen. Om du slutar med /g (med s/few/asd/ måste det alltid finnas tre snedstreck oavsett vad) och few visas två gånger på samma rad, endast den första few ändras till asd:

De få män, de få kvinnorna, de modiga.


De asd män, de få kvinnor, de modiga.

Detta är användbart under vissa omständigheter, som att ändra specialtecken i början av rader (till exempel att ersätta de större symboler som vissa använder för att citera tidigare material i e-posttrådar med en vågrät flik medan du lämnar en citerad algebraisk ojämlikhet senare i raden orörd), men i ditt exempel där du anger att var som helst few ska den ersättas , se till att du har den /g.

Följande två alternativ (flaggor) kombineras till en, :

-i alternativet används för att redigera i n plats på filen hello.txt.

-e alternativet anger e xpression / kommando som ska köras, i det här fallet s/.

Obs: Det är viktigt att du använder -i -e för att söka / ersätta. Om du gör -ie skapar du en säkerhetskopia av varje fil med bokstaven ”e”.

Kommentarer

  • Jag ' m använder OS X, för vad det ' är värt, men det här är felet jag får: sed: 1: " hello.txt ": ogiltig kommandokod.
  • En redigering föreslogs för att lägga till -e flagga till sed. Flaggan -e är valfri så länge kommandot att köra visas först, det finns inte en kommandofil och ett kommando-arg, och det finns bara ett kommando.
  • @roo på mac os x, med -ie Jag får den filen foo är säkerhetskopierad som fooe.
  • det här kommandot ger mig en extra fil som slutar med -e, varför ??: index.html-e sed -i -e ' s / n / d / g ' index.html
  • På Mac skapar -i -e en ny fil med -e bifogad namnet. Detta verkar fungera i bash: sed " -i " " " " -e " " s / få / asd / g " " någon fil.xml "

Svar

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

g: Global

s: ersättning

-i : realtid fungerar med filen plats

Kommentarer

  • När det gäller symlänkar är det bra att lägga till --follow-symlinks annars -i förvandlas symlink till en (redigerad) kopia av filen.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *