Найдите строки в Vim, которые начинаются одним образом и не заканчиваются другим.

Вопрос или проблема

Я пытаюсь использовать Vim для поиска с помощью / строк, которые начинаются и заканчиваются определённым образом. В частности, мне нужны строки, которые начинаются с символа ‘>’ и заканчиваются без символов “RNA.” Например, я хотел бы найти эту строку

>NM_001010867.4 Homo sapiens iron-sulfur cluster assembly factor IBA57 (IBA57),transcript variant 1, mRNA; nuclear gene for mitochondrial product

в поиске, но не находить эту строку

>NR_107042.1 Homo sapiens microRNA 8075 (MIR8075), microRNA

Я долго искал решение, но так и не смог его найти. Буду очень признателен за помощь.

/^>.*[^R][^N][^A]$

Также можно использовать grep (без начального /)

:/>.*[^(RNA.)][\n]

Из этих строк

helo
hello
>helloRNA.
>helloN00
>hell]RNA.
>twm0

выбраны только “>helloN00” и “>twm0”

очевидно

  • /> означает, что строка должна начинаться с ‘>’
  • .* означает, что будет соответствовать любому количеству символов
  • [^(RNA.)] не заканчивать ‘^’ этими строками
  • [\n] конец строки

Ответ или решение

Для поиска строк в Vim, которые начинаются с определенного символа и не оканчиваются на заданные подстроки, необходимо использовать регулярные выражения. В вашем случае мы ищем строки, которые начинаются с символа > и не заканчиваются на «RNA».

Шаг 1: Определение регулярного выражения

Для выполнения этой задачи регулярное выражение будет выглядеть следующим образом:

/^>.*\(RNA\)\|$/

Проанализируем регулярное выражение по частям:

  • ^> — указывает на начало строки с символом >.
  • .* — означает, что после символа > могут следовать любые символы (включая отсутствие таковых).
  • \(RNA\) — группа, которая ищет подстроку «RNA».
  • \|$ — позволяет завершить строку (то есть, не находить строки, которые заканчиваются на «RNA»).

Таким образом, все вместе это выражение ищет строки, которые начинаются с >, но не заканчиваются на «RNA».

Шаг 2: Использование регулярного выражения в Vim

Теперь, когда у нас есть регулярное выражение, мы можем использовать его в Vim. Откройте файл, в котором вы хотите выполнить поиск, и введите следующее:

/^>.*\v([^R][^N][^A]$|$)

Разбор нового регулярного выражения:

  • \v — включает режим "very magic", что упрощает синтаксис и делает его более читаемым.
  • [^R][^N][^A]$ — указывает, что строка не должна заканчиваться на «RNA». Это означает, что последними символами не могут быть R, N или A, когда они стоят на последних позициях строки.

Теперь, когда вы выполните поиск с этим выражением, Vim отобразит все строки, которые соответствуют вашим критериям.

Шаг 3: Проверка результатов

Проверьте ваш файл на наличие строк, которые соответствуют условиям. Например, строки, такие как:

>NM_001010867.4 Homo sapiens iron-sulfur cluster assembly factor IBA57 (IBA57),transcript variant 1, mRNA; nuclear gene for mitochondrial product
>NR_107042.1 Homo sapiens microRNA 8075 (MIR8075), microRNA
>helloN00
>twm0

В этом случае вам будут показаны только те строки, которые начинаются с > и не заканчиваются на «RNA».

Заключение

Используя предложенные регулярные выражения, вы сможете эффективно находить и фильтровать данные в Vim. Убедитесь, что вы понимаете структуру регулярных выражений, так как это значительно упростит задачу по поиску и манипуляциям с текстом в вашем коде или данных. Если у вас возникли дополнительные вопросы по использованию Vim или регулярных выражений, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...