Sed для Windows не работает после редактирования Powershell

Sed для Windows не работает после редактирования Powershell

Я хочу автоматизировать выборку данных из файла PDF для последующей обработки в электронной таблице. 1: Скопируйте весь текст в файл .txt с помощью Блокнота — ОК. 2: Удалите все символы новой строки, CRLF, чтобы создать однострочный файл с помощью Powershell — ОК.

3: Редактирование с помощью Sed для удаления ненужного текста не работает (я успешно использую Sed уже 2 года).

powershell -command ""$(Get-Content T1.txt)" > t2.txt"

sed -i -r "s/Limited/XX/g" t2.txt - не работает.

Но если вручную удалить все новые строки с помощью Notepad++ (используя regex \r\n) для создания txt-файла, та же команда sed работает нормально. Есть идеи? Может быть, есть альтернатива удалению всех новых строк в .bat-файле? Использую Win7 Prof 64-bit.

решение1

sedэто инструмент POSIX, разработанный для обработки текста. Возможно, ваш "файл с одной строкой" не являетсятекстовый файл в терминах POSIX:

Файл, содержащий символы, организованные в ноль или более строк. Строки не содержат символов NUL, и ни одна из них не может превышать {LINE_MAX}байт в длину, включая символ <newline>. […] многие утилиты выдают предсказуемый или осмысленный вывод только при работе с текстовыми файлами.

Если он не пустой, он будет содержатьнеполная строкатолько:

Последовательность из одного или нескольких символов, отличных от <новой строки>, в конце файла.

Сравните с определениемлиния:

Последовательность из нуля или более символов, не являющихся символами новой строки, плюс завершающий символ новой строки.

LFявляется символом <newline> ( CRне является; в данном контексте CRне является специальным).

Я не знаю Powershell и не могу сказать, вменяем ли ваш код, но если он удаляет все новые строки, то, вероятно, создает неполную строку. Я думаю, Notepad++ достаточно умен, чтобы завершить строку в любом случае.

Некоторые реализации sedне обрабатывают неполные строки (пример) и некоторые делают (по крайней мере, GNU sedделает). По-видимому, ваш sedне делает. Найдите, sedчто делает, или убедитесь, что "отдельная строка" правильно завершается символом <newline>. Например, в Unix эта команда:

echo >> T1.txt

добавляет ровно один символ <newline> к T1.txt. Я не знаю, как это сделать в Powershell, извините.

Обратите внимание, если исправлено T1.txtпревышение байтов в одной строке, то формально это все еще не будет текстовым файлом, поэтому утилиты обработки текста все еще могут не работать с ним. Я хочу сказать, что у вас может быть ограничение на длину строки, и поэтому это может не работать в некоторых случаях, даже после того, как вы исправите файл, добавив завершающий символ <newline>.{LINE_MAX}sed

Видетьэтот ответчтобы получить идею для обходного пути.

Связанный контент