Excel voorbeeld L-Dataverwerking basic steps
Inhoudsopgave:
Heel vaak moet u bij het werken met tekstbestanden tekstreeksen in een of meer bestanden zoeken en vervangen.
sed
is een bekend persoon. Het kan eenvoudige tekstmanipulatie uitvoeren op bestanden en invoerstromen zoals pijpleidingen. Met
sed
kunt u woorden en lijnen zoeken, vinden en vervangen, invoegen en verwijderen. Het ondersteunt eenvoudige en uitgebreide reguliere expressies waarmee u complexe patronen kunt matchen.
, zullen we het hebben over het vinden en vervangen van tekenreeksen door
sed
. We laten u ook zien hoe u een recursieve zoekopdracht uitvoert en vervangt.
String zoeken en vervangen door
sed
Er zijn verschillende versies van
sed
, met enkele functionele verschillen daartussen. macOS gebruikt de BSD-versie en de meeste Linux-distributies worden standaard geleverd met GNU
sed
. We zullen de GNU-versie gebruiken.
De algemene vorm van zoeken en vervangen van tekst met behulp van
sed
neemt de volgende vorm aan:
sed -i 's/SEARCH_REGEX/REPLACEMENT/g' INPUTFILE
-
-i
- Standaard schrijftsed
zijn uitvoer naar de standaarduitvoer. Deze optie verteltsed
om bestanden op hun plaats te bewerken. Als een extensie wordt geleverd (ex -i.bak), wordt een back-up van het oorspronkelijke bestand gemaakt.s
- Het vervangende commando, waarschijnlijk het meest gebruikte commando in sed./ / /
- Scheidingsteken. Het kan elk willekeurig teken zijn, maar meestal wordt het schuine streepje (/
) gebruikt.SEARCH_REGEX
- Normale tekenreeks of een reguliere expressie om naar te zoeken.REPLACEMENT
- De vervangende string.g
- Wereldwijde vervangingsvlag.sed
leest standaard het bestand regel voor regel en wijzigt alleen de eerste keer datSEARCH_REGEX
op een regelSEARCH_REGEX
. Wanneer de vervangende vlag wordt verstrekt, worden alle gebeurtenissen vervangen.INPUTFILE
- De naam van het bestand waarop u de opdracht wilt uitvoeren.
Het is een goede gewoonte om aanhalingstekens rond het argument te plaatsen, zodat de shell-metatekens niet worden uitgebreid.
Laten we voorbeelden bekijken van het gebruik van de opdracht
sed
om tekst in bestanden te zoeken en te vervangen door enkele van de meest gebruikte opties en vlaggen.
Voor demonstratiedoeleinden zullen we het volgende bestand gebruiken:
file.txt
123 Foo foo foo foo /bin/bash Ubuntu foobar 456
sed -i 's/foo/linux/' file.txt
123 Foo linux foo linux /bin/bash Ubuntu foobar 456
Met de globale vervangingsvlag vervangt
sed
alle gevallen van het zoekpatroon:
sed -i 's/foo/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu linuxbar 456
Zoals je misschien hebt gemerkt, is in het vorige voorbeeld ook de substring
foo
in de
foobar
reeks vervangen. Als dit niet het gewenste gedrag is, gebruikt u de uitdrukking woordgrens (
\b
) aan beide uiteinden van de zoekreeks. Dit zorgt ervoor dat de gedeeltelijke woorden niet overeenkomen.
sed -i 's/\bfoo\b/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu foobar 456
Gebruik de vlag
I
om het patroon-hoofdlettergevoelig te maken. In het onderstaande voorbeeld gebruiken we zowel de vlaggen
g
als
I
:
sed -i 's/foo/linux/gI' file.txt
123 linux linux linux linux /bin/bash Ubuntu linuxbar 456
sed -i 's/\/bin\/bash/\/usr\/bin\/zsh/g' file.txt
De gemakkelijker en veel leesbaardere optie is om een ander scheidingsteken te gebruiken. De meeste mensen gebruiken de verticale balk (
|
) of dubbele punt (:) maar u kunt elk ander teken gebruiken:
sed -i 's|/bin/bash|/usr/bin/zsh|g' file.txt
123 Foo foo foo foo /usr/bin/zsh Ubuntu foobar 456
U kunt ook reguliere expressies gebruiken. Om bijvoorbeeld alle 3-cijferige nummers te zoeken en te vervangen door het stringnummer
number
u zou gebruiken:
sed -i 's/\b\{3}\b/number/g' file.txt
number Foo foo foo foo /bin/bash demo foobar number
Een ander handig kenmerk van sed is dat je het ampersand-teken
&
kunt gebruiken dat overeenkomt met het overeenkomende patroon. Het karakter kan meerdere keren worden gebruikt.
Als u bijvoorbeeld accolades
{}
rond elk 3-cijferig nummer wilt toevoegen, typt u:
sed -i 's/\b\{3}\b/{&}/g' file.txt
{123} Foo foo foo foo /bin/bash demo foobar {456}
Last but not least is het altijd een goed idee om een back-up te maken bij het bewerken van een bestand met
sed
. Om dat te doen, biedt u gewoon een uitbreiding van de optie
-i
. Als u bijvoorbeeld
file.txt
wilt bewerken en het oorspronkelijke bestand wilt opslaan als
file.txt.bak
u:
sed -i.bak 's/foo/linux/g' file.txt
ls
Recursief zoeken en vervangen
Soms wilt u mappen recursief zoeken naar bestanden die een string bevatten en de string in alle bestanden vervangen. Dit kan worden gedaan door commando's zoals
find
of
grep
om recursief bestanden in de map te vinden en de bestandsnamen naar
sed
.
De volgende opdracht zoekt recursief naar bestanden in de huidige werkmap en geeft de bestandsnamen door aan
sed
.
find. -type f -exec sed -i 's/foo/bar/g' {} +
Om problemen met bestanden die ruimte in hun naam bevatten te voorkomen, gebruikt u de optie
-print0
die vertelt
find
om de bestandsnaam af te drukken, gevolgd door een null-teken en de uitvoer naar
sed
xargs -0
met
xargs -0
:
find. -type f -print0 | xargs -0 sed -i 's/foo/bar/g'
Gebruik de optie
-not -path
om een map uit te sluiten. Als je bijvoorbeeld een string in je lokale git repo vervangt om alle bestanden uit te sluiten die beginnen met punt (
.
), Gebruik dan:
find. -type f -not -path '*/\.*' -print0 | xargs -0 sed -i 's/foo/bar/g'
find. -type f -name "*.md" -print0 | xargs -0 sed -i 's/foo/bar/g'
Een andere optie is om de opdracht
grep
gebruiken om recursief alle bestanden te vinden die het zoekpatroon bevatten en vervolgens de bestandsnamen naar
sed
te
sed
:
grep -rlZ 'foo'. | xargs -0 sed -i.bak 's/foo/bar/g'
Conclusie
Hoewel het misschien ingewikkeld en complex lijkt, is het zoeken en vervangen van tekst in bestanden door
sed
in het begin heel eenvoudig.
Voor meer informatie over
sed
commando's, opties en vlaggen gaat u naar de GNU sed-handleiding en de Grymoire sed-tutorial. Als u vragen of feedback heeft, kunt u een reactie achterlaten.
Beoordeling: Dr. Fone brengt iPhone-bestanden terug van de dood
Zoals een iPhone- of iPad-gebruiker weet, is het maar al te gemakkelijk om per ongeluk informatie van uw apparaat te verwijderen door eenvoudigweg het scherm op de verkeerde manier aan te raken. En als die gegevens eenmaal verdwenen zijn, is die voorgoed verdwenen - tenzij je Dr. Fone van Wondershare hebt, een programma van $ 100 (gratis demo met beperkte mogelijkheden) dat in staat bleek om verloren gegevens van iOS-apparaten te herstellen ... soms.
Het paneel voor wiskundige invoer gebruikt de wiskundige herkenning die is ingebouwd in Windows 7 om handgeschreven wiskundige uitdrukkingen te herkennen. U kunt het dan gemakkelijk gebruiken met tekstverwerkers of computertabellen. Het paneel voor wiskundige invoer is ontworpen om te worden gebruikt met een tabletpen op een tablet-pc, maar u kunt het ook gebruiken met elk invoerapparaat, zoals een aanraakscherm of zelfs een muis.
Het paneel voor wiskundige invoer gebruikt de wiskundige herkenner die in Windows is ingebouwd 7 om handgeschreven wiskundige uitdrukkingen te herkennen. Je kunt het dan gemakkelijk gebruiken met tekstverwerkers of computertabellen.
Hoe Facebook te gebruiken wifi vinden om gratis hotspots te vinden
Hier is een korte handleiding voor de nieuwe Facebook Find WiFi-functie om gratis hotspots te vinden. Bekijken!