Я работаю от ужасных текстовых данных (2GB csv-файла), который включает практически все escape-символы 0x00-0x1F, забрызганные по всему файлу. Я попытался прочитать в R для обработки, но не может из-за ЭОФ (0x04):Удалите ряд escape/непечатаемых символов в sed
Warning message:
In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
EOF within quoted string
Так я думал, СЭД будет хорошо использовать, чтобы удалить все непечатаемую мусор в файле, но там, кажется быть некоторой странностью в том, как представлять символы побега в синтаксисе sed. Я попытался все следующие, которые не похоже на работу:
Включить только указанные символы:
sed 's/[^a-zA-Z 0-9`[email protected]#$%^&*()_+\[\]\\{}|;'\'':",.\/<>?]//g' IN.csv > OUT.csv
Определить диапазон непечатаемых в десятичной или шестнадцатеричной:
cat IN.csv | sed 's/[\d0-\d31]//g' > OUT.csv
cat IN.csv | sed s/[$'\x00'-$'\x1F']//g OUT.csv
cat IN.csv | sed 's/\x00-\x1F//g' > OUT.csv
и используя Ctrl-VCtrl-D, чтобы произвести это:
cat IN.csv | sed s/^D//g > OUT.csv
Все команды, как представляется, выполняются, но результирующий вывод файла не удаляет непечатаемые символы и, как представляется, изменяет результат неожиданным образом.
То, что я обнаружил, что это работает так:
cat IN.csv | sed 's/'`echo -e "\x04"`'//g' > OUT.csv
или это:
cat IN.csv | sed 's/\x04//g' > test3.csv
Однако это работает только для одного побега полукокса. Есть ли лучший способ адресовать все непечатаемые символы одновременно в одном диапазоне без необходимости выполнять 1 команду для каждого непечатаемого? Я предполагаю, что я не должен правильно вводить синтаксис диапазона.
Вы пытались что-то вроде '[^ - ~ \ t \ r \ n]'? или '[^ [: space:]! - ~]' –
Вы пытались использовать отрицание класса символов POSIX для печатаемых символов: '' s/[^ [: print:]] // g'' или для управления characters '' s/[[: cntrl:]] // g''? –
Спасибо. Было похоже, что файл s// [[: cntrl:]] // g 'работает, однако размеры файлов между этой и [: print:] версиями несколько отличались.Возможно, мне придется исследовать различия между ними. –