Hvordan kan jeg finde og erstatte bestemte ord i en tekstfil ved hjælp af kommandolinjen?
sed -i 's/original/new/g' file.txt
Forklaring:
sed
= Stream EDitor
-i
= in-place (dvs. gemme tilbage til den oprindelige fil)
Kommandostrengen:
s
= erstatningskommandostrøm
original
= et regulært udtryk, der beskriver det ord, der skal erstattes (eller bare selve ordet)
new
= den tekst, der skal erstattes med
g
= global (dvs. erstatter alle og ikke kun den første forekomst)
file.txt
= filnavnet
Der er en række forskellige måder at gøre dette på. Den ene er ved hjælp af sed
og Regex. SED er en Stream Editor til filtrering og transformation af tekst. Et eksempel er som følger:
marco@imacs-suck: ~$ echo "The slow brown unicorn jumped over the hyper sleeping dog" > orly
marco@imacs-suck: ~$ sed s/slow/quick/ < orly > yarly
marco@imacs-suck: ~$ cat yarly
The quick brown unicorn jumped over the hyper sleeping dog
En anden måde, som måske giver mere mening end < strin
og > strout
, er med pipes!
marco@imacs-suck: ~$ cat yarly | sed s/unicorn/fox/ | sed s/hyper/lazy/ > nowai
marco@imacs-suck: ~$ cat nowai
The quick brown fox jumped over the lazy sleeping dog
Gennem awk's gsub-kommando,
awk '{gsub(/pattern/,"replacement")}' file
Eksempel:
awk '{gsub(/1/,"0");}' file
I ovenstående eksempel erstattes alle 1's med 0's uanset i hvilken kolonne de er placeret.
Hvis du ønsker at foretage en udskiftning i en bestemt kolonne, skal du gøre sådan her,
awk '{gsub(/pattern/,"replacement",column_number)}' file
Eksempel:
awk '{gsub(/1/,"0",$1);}' file
Den erstatter kun 1 med 0 i den første kolonne.
Gennem Perl,
$ echo 'foo' | perl -pe 's/foo/bar/g'
bar