Sed para Windows no funciona después de la edición de Powershell

Sed para Windows no funciona después de la edición de Powershell

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

sedes 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.

LFes el carácter <nueva línea> ( CRno lo es; en este contexto CRno 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 sedno procesan líneas incompletas (ejemplo) y algunos lo hacen (al menos GNU sed). Aparentemente tu sedno. Busque sedeso 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.txtexcedí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.

información relacionada