varios sintaxis mover ejemplos comandos comando basicos archivos bash cat

bash - sintaxis - comandos linux



muestra el contenido de todos los archivos con sus nombres de archivo con cat (6)

Esto fue discutido recientemente en Hacker News a través de la publicación del blog 4 comandos de UNIX que uso todos los días .

Lo esencial era usar esto:

more * | cat

Para obtener esto:

:::::::::::::: jack.txt :::::::::::::: Once upon a time there was a fellow named Jack. :::::::::::::: lyingryan.txt :::::::::::::: Now that "trickle down economics" has been tested for 30 years and the data shows it has been a total failure, candidates still claim that cutting taxes for billionaires will help the economy. :::::::::::::: market.txt ::::::::::::::: Jack went to market to sell the family cow. He came back with a handful of magic beans.

Que es mucho más bonito que un bucle for ... do ... done .

La publicación del blog también menciona muchas alternativas a este enfoque para que sea compatible con diferentes unidades, como head -n 99999 * comparación con head -n 0 * que solo funciona en Linux.

No puedo encontrar una manera de imprimir cada nombre de archivo antes de su contenido con cat . Esto es lo que estoy tratando de hacer:

raja@badfox:~/Perl/t$ ls 1.txt 2.txt 3.txt raja@badfox:~/Perl/t$ echo " I am " >> 1.txt raja@badfox:~/Perl/t$ echo " trying " >> 2.txt raja@badfox:~/Perl/t$ echo " to do this " >> 3.txt raja@badfox:~/Perl/t$ cat *.* I am trying to do this raja@badfox:~/Perl/t$

En el último comando solo obtuve el texto de esos archivos, pero en realidad quiero el texto junto con los nombres de los archivos. Me refiero a esto

Filename:1.txt <Data in the file> Filename:2.txt <Data in that file> Filename:3.txt <Data in that file >


Se puede lograr, por ejemplo, con

ls -1 *.txt | xargs -I % sh -c "echo % ; cat %"

simplemente:

  • para cada archivo .txt
  • ejecute el comando echo filename ; cat filename echo filename ; cat filename (el % es un patrón de reemplazo definido por -I )

También puedes abusar de grep un poco logrando que:

grep -r ''.*'' *.txt

Para obtener números de línea puede

grep -rn ''.*'' *.txt

Por encima de grep solo se busca cualquier cosa. En caso de que no esté interesado en líneas vacías, incluso puede haber simplificado:

grep -r . *txt

Además, el interruptor -r grep hace que grep se ejecute de forma recursiva, por lo que puedes

grep -r . .

para listar el contenido de todos los archivos en sus directorios actuales.

[EDITAR] Aspecto negativo: es lento, por lo que para una gran cantidad de archivos no lo usaría.


cat no imprime los nombres de los archivos. O haga que el shell lo haga o use head o tail : imprimen el nombre del archivo cuando pasa varios archivos (no exactamente en el mismo formato). Use tail -n +1 para imprimir el archivo completo (comenzando en la línea 1, las líneas están numeradas desde 1).

tail -n +1 -- *.txt


$ for f in *; do echo "Filename: $f"; cat "$f"; done Filename: 1.txt I am Filename: 2.txt trying Filename: 3.txt to do this


find . -name /*.txt -print -exec cat {} /;