
Я хочу автоматизировать выборку данных из файла 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
Видетьэтот ответчтобы получить идею для обходного пути.