Reacties
- tldp.org/LDP/abs/html/x23170.html
- grymoire.com/Unix/Sed.html
- Dit mag niet als een duplicaat worden gemarkeerd omdat het andere antwoord waarnaar wordt verwezen niet ' laat zien hoe je een enkelvoudig bestand vervangt, terwijl dit antwoord dat wel doet. Ofwel of integreer dit antwoord in dat antwoord
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 bestandfoo
is geback-upt alsfooe
. - 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.