/ / Legge e scrive un file usando lo script Unix o Perl [chiuso] - perl, file, unix

Leggi e scrivi un file usando lo script Unix o Perl [chiuso] - perl, file, unix

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 № 1

Ci 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.