как вы ищете файлы, содержащие окончания строки dos (crlf) с помощью grep в linux?

<p>я хочу искать файлы, содержащие окончания строки dos, с помощью grep в linux. что-то вроде этого:</p><pre class="lang-sh prettyprint-override"><code>grep -iur --color '\r\n' . </code></pre><p>кажется, что вышеприведенное соответствует буквальному <code>rn</code>, а это не то, что нужно.</p><p>вывод этого будет передан через xargs в todos для преобразования crlf в lf следующим образом</p><pre><code>grep -iurl --color '^m' . | xargs -ifile fromdos 'file' </code></pre>

<p>использование <kbd>ctrl</kbd>+<kbd>v</kbd>, <kbd>ctrl</kbd>+<kbd>m</kbd> ввести буквенный символ возврата каретки в строку grep. так:</p><pre><code>grep -iur --color "^m" </code></pre><p>будет работать - если <code>^m</code> есть буквальный cr, который вы вводите, как я предложил.</p><p>если вам нужен список файлов, вы также хотите добавить опцию <code>-l</code>.</p><p><strong>объяснение</strong></p><ul> <li><code>-i</code> игнорировать двоичные файлы</li> <li><code>-u</code> запрещает grep удалять символы cr. по умолчанию он будет делать это, если решит, что это текстовый файл.</li> <li><code>-r</code> рекурсивно читает все файлы в каждом каталоге.</li> </ul>

<p>grep, вероятно, не тот инструмент, который вам нужен для этого. он напечатает строку для каждой соответствующей строки в каждом файле. если, скажем, вы не хотите 10 раз запускать задачи для файла из 10 строк, то grep - не лучший способ для этого. используя команду find для запуска файла для каждого файла в дереве, затем выполните поиск по "crlf", чтобы получить одну строку вывода для каждого файла с окончаниями строк в стиле dos:</p><pre><code>find . -not -type d -exec file "{}" ";" | grep crlf</code></pre><p>получит вам что-то вроде:</p><pre><code>./1/dos1.txt: ascii text, with crlf line terminators ./2/dos2.txt: ascii text, with crlf line terminators ./dos.txt: ascii text, with crlf line terminators</code></pre>

<pre><code>grep -iulr $'r'  <a href="http://explainshell.com/explain?cmd=grep+-iulr">объяснитьhell.com - grep -iulr 

если ваша версия grep поддерживает параметр <strong>- - p (--perl-regexp)</strong>, тоgrep -lup 'r$' </code></pre><p>может быть использован.</p>

<pre><code># list files containing dos line endings (crlf) cr="$(printf "r")" # alternative to ctrl-v ctrl-m grep -ilsr "${cr}$" . grep -ilsr $'\r$' . # yet another & even shorter alternative 

запрос был поиском ... у меня похожая проблема ... кто-то отправил смешанные окончания строк в систему управления версиями, так что теперь у нас есть куча файлов с 0x0d 0x0d 0x0a окончаниями строк. обратите внимание, чтоgrep -p 'x0dx0a' находит все строки, тогда какgrep -p 'x0dx0dx0a' а такжеgrep -p 'x0dx0d' не находит строк, поэтому внутри grep может происходить что-то еще, когда дело касается шаблонов окончания строк ... к сожалению для меня!

вы можете использовать команду файла в unix. это дает вам кодировку символов файла вместе с разделителями строк.$ file myfile myfile: iso-8859 text, with crlf line terminators $ file myfile | grep -ow crlf crlf 

если, как и я, ваш минималистический unix не включает в себя такие тонкости, как команда <strong>file</strong>, и обратные косые черты в ваших выражениях <strong>grep</strong> просто не взаимодействуют, попробуйте это:$ for file in `find . -type f` ; do > dump $file | cut -c9-50 | egrep -m1 -q ' 0d| 0d' > if [ $? -eq 0 ] ; then echo $file ; fi > done изменения, которые вы можете внести в вышеперечисленное, включают: настройте команду <strong>find</strong>, чтобы найти только файлы, которые вы хотите сканировать измените команду <strong>dump</strong> на <strong>od</strong> или любую другую утилиту для создания дампа убедитесь, что команда <strong>cut</strong> содержит начальный и конечный пробел, а также вывод шестнадцатеричных символов из утилиты <strong>dump</strong> ограничьте вывод <strong>dump</strong> первыми 1000 символами или около того для эффективности например, что-то вроде этого может работать для вас, используя <strong>od</strong> вместо <strong>dump</strong>: od -t x2 -n 1000 $file | cut -c8- | egrep -m1 -q ' 0d| 0d|0d$' </code></pre>