У меня есть файл на сервере в другом кампусе, который все в нижнем регистре, который мне нужно изменить на все прописные. Есть ли простая команда Unix, которая сделает это? [Я использую PuTTy на ПК, если это имеет какое-либо значение.]

Это всего 4 разные буквы (это ДНК, так что просто A, T, C и G), так что 4 отдельные функции поиска и замены также будут работать. (В VI или другом текстовом редакторе, который будет работать через удаленный доступ.) Но я не знаю, как выполнить поиск и замену в VI?

Я мог бы скопировать его на свой рабочий стол, выполнить поиск и замену в локальном текстовом редакторе, а затем скопировать обратно, но тогда он закончится полным разрывом строк в Windows? [Я нахожусь на ПК, удаленная машина - сервер Linux, и программа, которая мне нужна для интерпретации файла ДНК, может обрабатывать только разрывы строк Unix.]

3 ответа3

4

Вам не нужно открывать файл в редакторе, вы можете использовать tr для (t) перевода (c) символов (man-страницу) напрямую:

tr '[:lower:]' '[:upper:]' < input.txt > output.txt
2

Это было бы решением VI. Если вы хотите заменить только эти символы на верхний регистр

:s/[actg]/\U\0/g

И для всех персонажей

:s/[a-z]/\U\0/g

Объяснение: регулярное выражение s(ubstite)[actg] для этих символов или [a-z] для диапазона. \U\0 означает: изменяет шаблон сопоставления в верхний регистр g заменяет все вхождения

Рекомендуемое чтение:http://vimregex.com/#substitute

1

Я уверен, что другие придут с более элегантными решениями, но так как ваш алфавит ограничен только 4 буквами, вы можете просто сделать это

sed 's/a/A/g;s/t/T/g;s/c/C/g;s/g/G/g' <filename>

если это работает правильно, вы можете добавить > <filename> или sed -i ... чтобы сохранить в файл

Проверьте Википедию для получения дополнительной информации

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .