A cosa serve il "gatto"?


14

Ho visto il comando cat emergere in alcune cose online ed ero curioso di sapere cosa catfacesse e a cosa servisse nel contesto di qualcuno che sta semplicemente facendo delle semplici cose da riga di comando.

Risposte:


12

cat's scopo primario è quello con gatto file Enate. cat file1 file2 ...mostrerà il contenuto dei file, file2e gli altri uno dopo l'altro, come se i contenuti fossero in un unico file. Vedi la manpage :

NAME
       cat - concatenate and print files

È pensato per l'uso in cui:

  • un comando target non può leggere da file ed è necessario passargli più file. Un esempio è l' trutilità. Di solito, con un file, dovresti fare:

    tr < file
    

    Ma con più file, il reindirizzamento non può essere utilizzato, quindi devi fare:

    cat file1 file2 ... | tr
    
  • un comando target può leggere da più file, ma il suo comportamento può cambiare quando vengono dati più file. Un esempio è wc, che stampa i conteggi di ciascun file, insieme ai nomi dei file, dove potresti aver desiderato solo il totale, senza un nome file.

Ricordate che la maggior parte dei comandi che si incontrano ( grep, sed, awk, sort, ...) in grado di leggere i file perfettamente bene.

Se si desidera visualizzare il contenuto di un file, utilizzare un cercapersone - lesse moresono entrambi in grado di presentare i file per la visualizzazione e sono molto più convenienti da usare.


Il reindirizzamento può benissimo essere utilizzato con più file in quanto è possibile combinarlo con la sostituzione di processi e comandi: < <(cat file[12]) trcosì come <<<$(cat file[12]) trentrambi sono modi perfettamente validi per reindirizzare più file. Naturalmente è necessario anche catquello, solo che le tubazioni non sono l'unico modo.
dessert

@dessert se devi essere pedante, quel reindirizzamento usa ancora solo un singolo file - il file che rappresenta lo stdout del comando (o stdin, se viceversa). Bash non supporta il vero reindirizzamento multi-file come fa zsh.
Muru,

9

catè uno dei comandi più utilizzati sui sistemi operativi simili a Unix. Ha tre funzioni correlate per quanto riguarda i file di testo:

  1. mostrandoli
  2. combinandone copie
  3. crearne di nuovi.
  4. Copia i file

la sintassi generale del gatto è:

cat [options] [filenames] [-] [filenames]

Lettura dei file

L'uso più comune di cat è leggere il contenuto dei file e cat è spesso il programma più conveniente per questo scopo. Tutto ciò che è necessario per aprire un file di testo per la visualizzazione sul monitor è digitare la parola cat seguita da uno spazio e il nome del file, quindi premere il tasto INVIO. Ad esempio, di seguito verranno visualizzati i contenuti di un file denominato file1:

cat file1

Concatenazione

Il secondo ruolo del gatto è la concatenazione. (Questa è la fonte del curioso nome del gatto.) Non c'è alcun effetto sui file originali.

Ad esempio, il comando seguente concatena le copie del contenuto dei tre file file1, file2 e file3:

cat file1 file2 file3

Il contenuto di ciascun file verrà visualizzato sullo schermo del monitor. Questo output può essere facilmente reindirizzato utilizzando l'operatore di reindirizzamento dell'output su un altro file, ad esempio file4, utilizzando quanto segue:

cat file1 file2 file3 > file4

Creazione di file

Grazie al commento di @muru : cat è in grado di creare nuovi file in base alla funzione di reindirizzamento della shell e non a se stessa

Per file di piccole dimensioni questo è spesso più semplice rispetto all'utilizzo di vi, gedit o altri editor di testo. Si ottiene digitando cat seguito dall'operatore di reindirizzamento dell'output e dal nome del file da creare, quindi premendo ENTERe infine premendo contemporaneamente i tasti Ctrl& d.

Ad esempio, è possibile creare un nuovo file denominato file1 digitando

cat > file1

quindi premere ENTERe contemporaneamente premere i tasti Ctrl& d.

PS1: se esiste già un file denominato file1, verrà sovrascritto

PS2: puoi aggiungere al file uscito usando l'operatore append >>esempio cat >> file1

Copia file

Il comando cat può anche essere usato (a seconda della funzione di reindirizzamento della shell) per creare un nuovo file e trasferire ad esso i dati da un file esistente. Esempio: crea una copia del file oldfile.txt:

cat oldfile.txt > newfile.txt

Riferimenti:


1
Ri 3: catnon sta creando quei file - la shell è quando hai usato il reindirizzamento. Potresti averlo fatto bene echo foo > file1.
muru,

@muru Hai perfettamente ragione, ma è ancora un uso del comando cat
Maythux,

1
No, non lo è. Stai attribuendo a catciò che viene effettivamente fatto da qualcos'altro. Ad esempio, fare less file1 > file2(o grep '.*' file1 > fileo awk 1 file1 > file2o ...) ha lo stesso effetto. Idem per 4. Questi sono solo abusi.
muru,

So che potrei usarlo solo > filee dare lo stesso risultato, ma non posso considerarlo valido farlo con Cat ?!
Maythux,

1
È possibile, se si specifica che catnon sta creando il file. Dire che catcrea o copia il file è semplicemente falso.
muru,

1

Può essere usato per mostrare il contenuto di un file. Ad esempio: cat "my file.txt". Puoi anche fare man catper mostrarti i dettagli su cosa catpuò essere utilizzato.


0

Ecco un altro modo per creare file usando il reindirizzamento della shell (o piping) e cat:

cat << EOF > foo.sh
#!/bin/sh
echo 'Hello World!'
EOF

cat << EOFprodurrà le seguenti righe fino a quando la stringa non EOFverrà nuovamente incontrata. Quindi >( >>) reindirizzerà l'output sul file foo.sh. In alternativa, se è necessario creare un file come root, è possibile reindirizzare l'output al comando tee( tee -a), eseguito dal comando sudo:

cat << EOF | sudo tee foo.sh && sudo chmod +x foo.sh
#!/bin/sh
HELLO='Hello World!'
echo "\$HELLO"
EOF
  • Quanto sopra renderà il file eseguibile ( chmod +x) se è stato creato con successo ( &&).
  • Il significato speciale di alcuni caratteri (as $) dovrebbe essere evitato (con \) all'interno dell'output di cat.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.