wps para office metaclean mega llama full como linux unix ms-word

para - word en linux como se llama



Buscar archivos de MS Word en un directorio para contenido especĂ­fico en Linux (9)

Tengo una estructura de directorios llena de archivos de MS Word y tengo que buscar en el directorio una cadena en particular. Hasta ahora estaba usando el siguiente comando para buscar archivos en un directorio

encontrar . -exec grep -li ''search_string'' {} /;

encontrar . -name ''*'' -print | xargs grep ''search_string''

Pero esta búsqueda no funciona para archivos de MS Word.

¿Es posible hacer una búsqueda de cadenas en archivos de MS Word en Linux?


¿Has probado con awk ''/ Some | Word | In | Word /'' document.docx?


En un archivo .doc , el texto generalmente está presente y se puede encontrar en grep, pero ese texto está dividido e intercalado con códigos de campo e información de formato, por lo que es posible que la búsqueda de una frase que conozca no coincida. Una búsqueda de algo muy corto tiene más posibilidades de coincidir.

Un archivo .docx es en realidad un archivo comprimido que recopila varios archivos en una estructura de directorio (intente cambiar el nombre de un archivo .docx a .zip y luego descomprimirlo): con la compresión zip es poco probable que grep encuentre nada.


Esta es una forma de usar "descomprimir" para imprimir todo el contenido a la salida estándar, luego canalizar a "grep -q" para detectar si la cadena deseada está presente en la salida. Funciona para archivos de formato docx.

#!/bin/bash PROG=`basename $0` if [ $# -eq 0 ] then echo "Usage: $PROG string file.docx [file.docx...]" exit 1 fi findme="$1" shift for file in $@ do unzip -p "$file" | grep -q "$findme" [ $? -eq 0 ] && echo "$file" done

Guarde el script como "inword" y busque "wombat" en tres archivos con:

$ ./inword wombat file1.docx file2.docx file3.docx file2.docx

Ahora sabes que file2.docx contiene "wombat". Puede obtener más lujo agregando soporte para otras opciones de grep. Que te diviertas.


La mejor solución que encontré fue usar unoconv para convertir los documentos Word a html. También tiene una salida .txt, pero ese contenido se cayó en mi caso.

http://linux.die.net/man/1/unoconv


La utilidad de línea de comando opensource crgrep buscará en la mayoría de los formatos de documentos MS (soy el autor).


Las versiones más recientes de MS Word intercalan ascii [0] entre cada una de las letras del texto para fines que todavía no puedo entender. He escrito mis propias utilidades de búsqueda de MS Word que insertan ascii [0] entre cada uno de los caracteres en el campo de búsqueda y simplemente funciona bien. Torpe pero bien. Quedan muchas preguntas. Tal vez los personajes basura no son siempre lo mismo. Se necesitan hacer más pruebas. Sería bueno si alguien pudiera escribir una utilidad que tomaría todo esto en cuenta. En mi máquina de Windows, los mismos archivos responden bien a las búsquedas. ¡Podemos hacerlo!



Si tiene un programa instalado llamado antiword , puede usar este comando:

find -iname "*.doc" |xargs -I {} bash -c ''if (antiword {}|grep "string_to_search") > /dev/null 2>&1; then echo {} ; fi''

reemplace "string_to_search" en el comando anterior con su texto. Este comando escupe nombre (s) de archivo de archivos que contienen "string_to_search"

El comando no es perfecto porque funciona de forma extraña en archivos pequeños (el resultado puede ser poco confiable ), ya que algunos rescates de palabra inversa este texto:

"Me temo que el flujo de texto de este archivo es demasiado pequeño para manejarlo".

si el archivo es pequeño (lo que signifique .o)


Soy traductora y no sé casi nada sobre scripting, pero estaba tan enojado con grep al no poder escanear dentro de archivos .doc de Word que resolví cómo hacer este pequeño script de shell para usar catdoc y grep para buscar en un directorio de archivos .doc para una cadena de entrada dada.

Necesita instalar los paquetes catdoc y docx2txt

#!/bin/bash echo -e "/n Welcome to scandocs. This will search .doc AND .docx files in this directory for a given string. /n Type in the text string you want to find... /n" read response find . -name "*.doc" | while read i; do catdoc "$i" | grep --color=auto -iH --label="$i" "$response"; done find . -name "*.docx" | while read i; do docx2txt < "$i" | grep --color=auto -iH --label="$i" "$response"; done

¡Todas las mejoras y sugerencias son bienvenidas!