random image

Aambeeld

sed

Op een dag moest ik letters vervangen in een database.
Dàt ging niet meer met de hand en dus ben ik een beetje in sed gedoken.
Een programma waarmee je razendsnel enorme bewerkingen mee kan uitvoeren.
goeie tutorial op
www.cs.hmc.edu
en een goeie uitleg op Drupal over sed.

Het werkt natuurlijk alleen op de commandline, dit is de basis:

sed [options] script input_file >output_file
.*[]^$\ zijn speciale tekens; dus een slash toevoegen:
. wordt \.

Bijvoorbeeld

sed 's/fuot/fout/g' tekst >tekst-fixed

s zoekt en vervangt 'fuot' in 'fout'
g voor global, zoekt het hele document af
tekst is de naam van het file
tekst-fixed is hier de naam van het gecorrigeerde document

If your sed script is getting long, you can put it into a file, like so:

# This file is named "sample.sed"
# comments can only appear in a block at the beginning
s/color/colour/g
s/flavor/flavour/g
s/theater/theatre/g

Then call sed with the "-f" flag:

>sed -f sample.sed filename
or
>sed -f sample.sed filename >filename-executed

sed [options] script input_file >output_file
.*[]^$\ zijn speciale tekens; dus een slash toevoegen:
files/doc wordt files\/doc

sed 's/ë/ë/g' test >test-fixed

-e maakt het betreffende stukje tot onderdeel van groter geheel

sed -e 's/ë/ë/g' -e 's/é/é/g' -e
? Snap ik zelf niet helemaal meer.

Dit is het voorbeeld van mijn eerste sessie om rare tekens uit de DB van Adriaan te halen.

Fout Goed SED code
ë ë s/ë/ë/g
é é s/é/é/g
è è s/è/è/g
ê ê s/ê/ê/g
ó ó s/ó/ó/g
ò ò s/ò/ò/g
ö ö s/ö/ö/g
ô ô s/ô/ô/g
ï ï s/ï/ï/g
ì s/
í s/
Ã^ à s/Ã\^/à/g
à á s/Ã/á/g
äc ä s/äc/ä/g
â â s/â/â/g
ü ü s/ü/ü/g
ù ù s/ù/ù/g
û
“ " s/“/"/g
” " s/”/"/g
– - s/–/-/g
© © s/©/©/g
’ ´ s/’/´/g
ç ç s/ç/ç/g
î s/
Ça s/
‘ ´ s/‘/´/g
’ ´ s/’/´/g
ë ë s/ë/ë/g
€ € s/€/€/g
… onbekend maar in tekst adriaan
½ onbekend maar in tekst adriaan, vermoedelijk ´

Een ander voorbeeld is het oplossen van Image module upgrade prolemen
De volgende lijn code veranderde stukken tekst
De basis is

sed '/tekst/ c\ nieuwetekst'

In een file alle stukken tekst 'files/images' vervangen met 'sitel/default/files/images gaat zo:

sed -e 's/files\/images/sites\/default\/files\/images/g' table > table-nieuw

Een hele rits documenten in verschillende folders bewerken.
Je gaat in naar de folder en dit is de code:

find . -name "*.*" -type f -exec sed -i "s/tekstoud/tekstnieuw/g" '{}' \;

find zoekt vanalles af
. in deze directory (en lager?)
- name "*.*" alles met een naam en een punt er tussen dus info.php maar ook uur.css
- type f alleen files, geen directories
Dit is erg handig als je bijvoorbeeld een nieuw theme aanmaakt in D6.
Je kan zo de hele folder in één keer klaarmaken.