Kommentarer
- tldp.org/LDP/abs/html/x23170.html
- grymoire.com/Unix/Sed.html
- Dette bør ikke markeres som et duplikat, fordi det andet svar, der henvises til, ikke ' t viser dig, hvordan du udskifter den i en enkelt fil, hvorimod dette svar gør det. Enten det eller integrer dette svar i det ene
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 filfoo
er backup-ed somfooe
. - 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.