Pregunta:
un.txt
cat a.txt
a
b
x
c
b.txt
cat b.txt
d
e
a
f
La Q:
SOMEMAGICK *.txt
a
P: ¿Cómo puedo mostrar solo las líneas que están en todos los archivos * .txt?
Respuesta:
Qué tal si
cat *.txt | sort | uniq -c | egrep "^ +$(ls -1 *.txt | wc -l) "
Y luego, para eliminar el número de apariciones, podría agregar …
cat *.txt | sort | uniq -c | egrep "^ +$(ls -1 *.txt | wc -l) " | sed -re 's/^ +[0-9]+ //'
Según el comentario de @Stephane, lo anterior no funcionará si una línea aparece varias veces dentro de un solo archivo. Aquí ordeno y unico cada archivo primero para evitar eso:
for f in *.txt; do sort -u $f > $f.uniqd; done
cat *.uniqd | sort | uniq -c | egrep "^ +$(ls -1 *.uniqd | wc -l) " | sed -re 's/^ +[0-9]+ //'
Aunque ahora ya no es una sola línea. 🙂