New Witness in Michael Jackson Allegations: Square One MJ Documentary | AVAILABLE ON PRIME VIDEO
Innehållsförteckning:
Ganska ofta när du arbetar med textfiler måste du hitta och ersätta strängar med text i en eller flera filer.
sed
är en s tream ed itor. Den kan utföra grundläggande textmanipulering på filer och inmatningsströmmar som rörledningar. Med
sed
du söka, hitta och ersätta, infoga och ta bort ord och rader. Det stöder grundläggande och utökade regelbundna uttryck som gör att du kan matcha komplexa mönster.
, vi pratar om hur man hittar och ersätter strängar med
sed
. Vi visar också hur du utför en rekursiv sökning och ersätter.
Hitta och ersätt strängen med
sed
Det finns flera versioner av
sed
, med några funktionella skillnader mellan dem. macOS använder BSD-versionen och de flesta Linux-distributioner kommer med GNU
sed
förinstallerat som standard. Vi kommer att använda GNU-versionen.
Den allmänna formen för att söka och ersätta text med
sed
använder följande form:
sed -i 's/SEARCH_REGEX/REPLACEMENT/g' INPUTFILE
-
-i
-sed
skriver som standard sin utgång till standardutgången. Det här alternativet sägersed
att redigera filer på plats. Om en tillägg tillhandahålls (ex -i.bak) skapas en säkerhetskopia av den ursprungliga filen.s
- Ersättarkommandot, förmodligen det mest använda kommandot i sed./ / /
- Avgränsar karaktär. Det kan vara valfritt tecken men vanligtvis används teckningen snedstreck (/
).SEARCH_REGEX
- Normal sträng eller ett vanligt uttryck att söka efter.REPLACEMENT
- Ersättningssträngen.g
- Global ersättningsflagg. Som standard läsersed
filen rad för rad och ändrar bara den första förekomsten avSEARCH_REGEX
på en rad. När ersättningsflaggan tillhandahålls kommer alla händelser att ersättas.INPUTFILE
- Namnet på filen som du vill köra kommandot på.
Det är bra att sätta citat runt argumentet så att metatecken för skalet inte kommer att expandera.
Låt oss se exempel på hur du använder
sed
kommandot för att söka och ersätta text i filer med några av dess mest använda alternativ och flaggor.
För demonstrationsändamål kommer vi att använda följande fil:
fil.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
Med den globala ersättningsflaggen ersätter
sed
alla förekomster av sökmönstret:
sed -i 's/foo/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu linuxbar 456
Som du kanske har lagt märke till ersätts också i föregående exempel substansen
foo
inuti
foobar
. Om detta inte är det önskade beteendet, använd ordgränsuttrycket (
\b
) i båda ändarna av söksträngen. Detta säkerställer att de partiella orden inte matchas.
sed -i 's/\bfoo\b/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu foobar 456
Använd
I
flaggan för att göra mönstermatchningen känslig. I exemplet nedan använder vi både
g
och
I
flaggorna:
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
Det enklare och mycket mer läsbara alternativet är att använda ett annat avgränsande tecken. De flesta använder den vertikala stapeln (
|
) eller kolon (:) men du kan använda valfritt annat tecken:
sed -i 's|/bin/bash|/usr/bin/zsh|g' file.txt
123 Foo foo foo foo /usr/bin/zsh Ubuntu foobar 456
Du kan också använda vanliga uttryck. Till exempel för att söka i alla 3-siffriga siffror och ersätta dem med strängnumret du skulle använda:
sed -i 's/\b\{3}\b/number/g' file.txt
number Foo foo foo foo /bin/bash demo foobar number
En annan användbar funktion hos sed är att du kan använda karaktäret ampersand
&
som motsvarar det matchade mönstret. Tecknet kan användas flera gånger.
Om du till exempel vill lägga till lockiga hängslen
{}
runt varje 3-siffriga nummer skriver du:
sed -i 's/\b\{3}\b/{&}/g' file.txt
{123} Foo foo foo foo /bin/bash demo foobar {456}
Sist men inte minst är det alltid en bra idé att göra en säkerhetskopia när du redigerar en fil med
sed
. För att göra det bara ge en förlängning till
-i
alternativet. Till exempel, för att redigera
file.txt
och spara originalfilen som
file.txt.bak
skulle du använda:
sed -i.bak 's/foo/linux/g' file.txt
ls
Rekursiv Hitta och ersätt
Ibland vill du rekursivt söka i kataloger efter filer som innehåller en sträng och ersätta strängen i alla filer. Detta kan göras genom att använda kommandon som
find
eller
grep
att rekursivt hitta filer i katalogen och leda filnamnen till
sed
.
Följande kommando söker rekursivt efter filer i den aktuella arbetskatalogen och skickar filnamnen till
sed
.
find. -type f -exec sed -i 's/foo/bar/g' {} +
För att undvika problem med filer som innehåller utrymme i deras namn använder
-print0
alternativet
-print0
som säger
find
att skriva ut filnamnet följt av ett nolltecken och leda utdata till
sed
med
xargs -0
:
find. -type f -print0 | xargs -0 sed -i 's/foo/bar/g'
För att utesluta en katalog använder
-not -path
alternativet
-not -path
. Om du till exempel byter ut en sträng i din lokala git-repo för att utesluta alla filer som börjar med punkt (
.
), Använd:
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'
Ett annat alternativ är att använda
grep
kommandot för att rekursivt hitta alla filer som innehåller sökmönstret och sedan rör filnamn till
sed
:
grep -rlZ 'foo'. | xargs -0 sed -i.bak 's/foo/bar/g'
Slutsats
Även om det kan verka komplicerat och komplicerat är det i början mycket enkelt att söka och ersätta text i filer med
sed
.
För att lära dig mer om
sed
kommandon, tillval och flaggor besöker du GNU sed-manualen och Grymoire sed-handledning. Om du har några frågor eller feedback kan du lämna en kommentar.
För icke-statliga organisationer och icke-statliga organisationer kan ICT4D-rymden vara en tuff mutter att spricka. Även om icke-statliga organisationer i allmänhet kämpar för att hitta verktygen för att möta deras specifika behov, möter utvecklare motsatt problem - att få sina verktyg i händerna på dem som behöver dem mest. Försök att ansluta icke-statliga organisationer och utvecklingssamhällen - fysiskt och praktiskt taget - fortsätter denna dag med varierande grad av framgång. Det finns inge
Naturligtvis är det bara en liten del att samla de två parterna på ett ställe - konferensrum eller chattrum. Att få dem att förstå varandras behov kan vara en annan. Medan en sida kan närma sig saker från en "teknik som letar efter ett problem" -vinkel, har frivilligorganisationerna ofta det helt tvärtom. Ett av de djärvaste försök som nyligen gjorts för att delta i ideella / utvecklaren prickade i februari 2007 på den djärvt titlade konferensen UN Meets Silicon Valley där FN träffade en massa S
Red Hat har lanserat ett nytt partnerprogram för att säkerställa att företagets Linux- och JBoss-program är kärnkomponenter i en cloud-computing-infrastruktur och för att garantera att Red Hat-baserade applikationer kommer att köras på ett tillförlitligt och säkert sätt i molnet. Det nya Premier Cloud Provider-certifierings- och partnerprogrammet presenterade i veckan certifierar leverantörer av cloud-computing för att erbjuda program och infrastruktur baserat på Red Hat-programvaran, inklusive
Amazon Web Services, som redan har ett teknologipartnerskap att driva RHEL som en del av sitt elastiska komput Cloud (EC2) erbjudande, har skrivit på att bli den första Red Hat Premier Cloud Provider Partner.
Med tiden kan du upptäcka att din Windows 8 Start-skärm kan sluta visa mycket kakel så att det ser ringa ut och svårt att hitta program genvägar. Det finns inget sätt att visa ännu mindre storlek på plattorna. Men Windows 8 erbjuder ett enkelt sätt att gruppera dessa programgenvägar, så att det blir mycket lättare att hitta dem. Om du faktiskt har många plattor på startskärmen, skulle gruppering av plattorna vara en fråga om städning till.
Gruppplattor på Windows 8 Startskärm