Grep не может найти конец строки в текстовом файле формата DOS?

Вы можете проверить, какой у него канал ожидания с некоторой частотой. Среднее значение канала ожидания, с которым вы сталкиваетесь, должно указывать на то, на что потрачено время в процессе.

Например: Считайте загрузку образа Ubuntu типичным процессом, связанным с сетью io:

$ url='http://mirror.dkm.cz/ubuntu-releases/16.04/ubuntu-16.04-desktop-amd64.iso'
$ wget "$url" & pid=$!

Когда вы это сделаете:

$ ps h -p $pid  -o wchan

Вы должны получать poll_schedule_timeout почти все время, следовательно, это сеть -io-связанный процесс, который, вероятно, использует epoll для net io.

В отличие от типичного процесса, связанного с процессором, такого как:

$ ( while :; do :; done )& pid=$!

, вы должны постоянно получать ожидающий канал - (= none = он находится на ядре ЦП).

3
14.10.2015, 00:42
1 ответ

В текстовых файлах Windows и DOS каждая строка имеет в конце дополнительный символ возврата каретки -. Это означает, что регулярное выражение )$не будет не соответствовать ни одной строке, потому что каждая строка будет иметь дополнительный символ возврата каретки -.

Чтобы сопоставить строки, которые заканчиваются на )и символ возврата каретки -, используйте )[[:space:]]$в качестве выражения. Бит [[:space:]]будет соответствовать любому одиночному «символу, подобному пробелу -», включая возврат каретки -.

Вы также можете дать grepлитерал возврата каретки в выражении, используя, например,. $')\r$'в качестве строки аргумента, которая является выражением. В некоторых оболочках $'...'является «строкой C -», и оболочка будет расширять управляющие последовательности в ней, такие как \t, \r, \nи т. д., до фактических символов, которые они представляют в язык программирования Си.

Некоторые варианты grepмогут также распознавать выражение \sкак соответствующее символу возврата каретки -(, точно так же, как использование более переносимого [[:space:]]будет ).

Если вы собираетесь работать с этими файлами в системе Unix, было бы проще преобразовать ваши файлы в текстовые файлы Unix, используя подход, который вы упомянули в своем вопросе (, сохранив текстовые файлы Unix из Vim. редактор )или преобразовав их с помощью такого инструмента, как dos2unix.


Текст «под MS -DOS и MS -Windows» относится к работе grepв этих конкретных операционных системах. Это не относится к вам, поскольку вы используете Ubuntu.

3
29.04.2021, 00:22

Теги

Похожие вопросы