Hvordan kan jeg finne og erstatte bestemte ord i en tekstfil ved hjelp av kommandolinjen?
sed -i 's/original/new/g' file.txt
Forklaring:
sed
= Stream EDitor
-i
= in-place (dvs. lagre tilbake til den opprinnelige filen)
Kommandostrengen:
s
= erstatningskommandoen
original
= et regulært uttrykk som beskriver ordet som skal erstattes (eller bare selve ordet)
new
= teksten som skal erstattes med det nye ordet
g
= global (dvs. erstatte alle og ikke bare den første forekomsten).
file.txt
= filnavnet.
Det finnes en rekke forskjellige måter å gjøre dette på. En er å bruke sed
og Regex. SED er en Stream Editor for filtrering og transformasjon av 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 annen måte som kan gi mer mening enn < 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
Gjennom awk&# 39s gsub-kommando,
awk '{gsub(/pattern/,"replacement")}' file
Eksempel:
awk '{gsub(/1/,"0");}' file
I eksemplet ovenfor er alle 1-tallet erstattet med 0-tallet uavhengig av hvilken kolonne det står i.
Hvis du vil gjøre en erstatning på en bestemt kolonne, gjør du slik,
awk '{gsub(/pattern/,"replacement",column_number)}' file
Eksempel:
awk '{gsub(/1/,"0",$1);}' file
Det erstatter 1 med 0 bare i den første kolonnen.
Gjennom Perl,
$ echo 'foo' | perl -pe 's/foo/bar/g'
bar