Sono nuovo in Unix e voglio scrivere questo scriptlegge un file e sostituisce alcune parole nel file con altre parole. Le operazioni da sostituire non sono così difficili da fare. Ma come posso leggere il contenuto del file e "lavorare" su questo tramite uno script Unix, e come posso scrivere i risultati in un nuovo file?
Quali comandi dovrei usare?
risposte:
3 per risposta № 1Ci deve essere un milione e un tutorial online per farlo in qualsiasi lingua. Usando sed questo è banale:
sed "s/foo/replacement/" in.txt > out.txt
O come un one-liner perl:
perl -ne "s/foo/replacement/g; print" in.txt > out.txt
E in uno script perl:
use warnings;
use strict;
open my $file, "<", "in.txt" or die $!;
open my $out, ">", "out.txt" or die $!;
while(<$file>){
s/foo/replacement/g;
print $out "$_n";
}
--- in.txt ---
foo
bar
baz
one
two
three
1 per risposta № 2
Puoi provare Perl one liner:
perl -p -e "s/pattern/replace/g" /path/to/infile > /path/to/outfile
Puoi fare una sostituzione sul posto usando -i
bandiera:
perl -pi -e "s/pattern/replace/g" /path/to/infile
1 per risposta № 3
In unix è possibile leggere da file e scrivere su file dalla shell e da script di bash senza programmazione.
per esempio.
echo "the quick brown fox jumps over the lazy cat" >test.txt
scriverà questo testo nel test.txt file.
cat test.txt >test_copy.txt
leggerà il file e lo scriverà a test_copy.txt
Questo non è molto utile, perché cp è meno digitando, ma ...
Puoi aggiungere piccole app tra:
cat test.txt | perl -p -e "s/cat/dog/" >corrected_test.txt
questo chiamerà Perl per sostituire l'animale sbagliato con quello corretto. Il -p parametro dice a perl di eseguire il comando su tutte le linee di input e di stampare il risultato sull'output.
Con questi lego-blocchi puoi creare utili app più grandi.
per esempio. creare un fix_cat.sh file (che sarà a bash sceneggiatura)
#!/bin/bash
cat $1
| perl -n -p -e "s/cat/dog/"
> $2
e fai chmod + x fix_cat.sh, per rendere eseguibile lo script di bash. (Alla fine delle righe significa lasciare che la stessa linea continui sulla riga successiva, che si legge un po 'più facilmente e rende più pratico aggiungere correzioni tra).
ora puoi
$./fix_cat.sh test.txt new_text.txt
e otterrai il testo corretto in new_text.txt
in bocca al lupo.