Kommentarer
- tldp.org/LDP/abs/html/x23170.html
- grymoire.com/Unix/Sed.html
- Detta bör inte markeras som en duplikat eftersom det andra svaret som refereras till inte ' t visar dig hur du byter ut på en enda fil, medan det här svaret gör det. Antingen det eller integrera det här svaret i det där
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 filenfoo
är säkerhetskopierad somfooe
. - 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.