
Quiero automatizar la selección de datos de un archivo pdf para su posterior procesamiento en una hoja de cálculo. 1: Copie todo el texto en un archivo .txt, usando el Bloc de notas - ok. 2: Elimine todas las nuevas líneas, CRLF, para crear un archivo de una sola línea, usando Powershell - ok
3: Las ediciones de Sed para recortar texto no deseado no funcionan (he usado sed con éxito durante 2 años).
comando powershell ""$(Obtener contenido T1.txt)" > t2.txt"
sed -i -r "s/Limited/XX/g" t2.txt - no funciona.
Sin embargo, al eliminar todas las nuevas líneas manualmente usando Notepad++ (usando expresiones regulares \r\n) para crear el archivo txt, el mismo comando sed funciona bien. ¿Algunas ideas? ¿Quizás una alternativa a eliminar todas las nuevas líneas en un archivo .bat? Usando Win7 Pro de 64 bits.
Respuesta1
sed
es una herramienta POSIX diseñada para manejar texto. Posiblemente su "archivo de una sola línea" no sea unarchivo de texto en términos de POSIX:
Un archivo que contiene caracteres organizados en cero o más líneas. Las líneas no contienen caracteres NUL y ninguna puede exceder
{LINE_MAX}
los bytes de longitud, incluido el carácter <nueva línea>. […] muchas utilidades solo producen resultados predecibles o significativos cuando operan con archivos de texto.
A menos que esté vacío, contendrá unlinea incompletasolo:
Una secuencia de uno o más caracteres que no son <nueva línea> al final del archivo.
Comparar con la definición delínea:
Una secuencia de cero o más caracteres que no son <nueva línea> más un carácter <nueva línea> de terminación.
LF
es el carácter <nueva línea> ( CR
no lo es; en este contexto CR
no es especial).
No conozco Powershell y no puedo decir si su código es correcto, pero si elimina todas las líneas nuevas, probablemente cree una línea incompleta. Supongo que Notepad++ es lo suficientemente inteligente como para completar la línea de todos modos.
Algunas implementaciones de sed
no procesan líneas incompletas (ejemplo) y algunos lo hacen (al menos GNU sed
). Aparentemente tu sed
no. Busque sed
eso o asegúrese de que la "línea única" termine correctamente con un carácter <nueva línea>. Por ejemplo, en Unix este comando:
echo >> T1.txt
agrega exactamente un carácter <nueva línea> a T1.txt
. No conozco una forma de Powershell, lo siento.
Tenga en cuenta que si el arreglo T1.txt
excedía los bytes en su única línea, formalmente aún no sería un archivo de texto, por lo que es posible que las utilidades de procesamiento de texto aún no funcionen con él. Mi punto es que es posible que tenga un límite de longitud de línea y, por lo tanto, es posible que no funcione en algunos casos, incluso después de corregir el archivo agregando un carácter <nueva línea> de terminación.{LINE_MAX}
sed
Veresta respuestapara tener una idea de solución.