удаление строки переменной во многих файлах

У меня есть много файлов, которые содержат похожие строки:

>33100_Pseudomonas_etcetera1 texttexttext >33632_Pseudomonas_etcetera2 texttexttext >36406_Pseudomonas_etcetera3 texttexttext 

и мне нужны такие выводы:

 >Pseudomomas_etcetera1 texttexttext >Pseudomomas_etcetera2 texttexttext >Pseudomomas_etcetera3 texttexttext 

Я уверен, что есть простое решение sed, которое я не могу понять,

Примечания: Символы всегда состоят из пяти цифр, за которыми следует подчеркивание, за которым следует Pseudomonas_etcetera. Эта строка всегда находится в начале своей строки и всегда начинается с «>». Все файлы имеют расширение “.sorted”.

    sed делает это:

     sed -E 's/>([0-9]+_)(\w+)/>\2/' files 

    если ваш шаблон именно под вопросом:

     sed -E 's/([0-9]+_)//' files 
    • -E использовать расширенные регулярные выражения
    • ([0-9]+_)(\w+) определяет две области шаблона Word, к которым вы будете обращаться с помощью \ 1 и \ 2 .

    Используя стандартный sed и предполагая, что все файлы находятся в текущем каталоге:

     mkdir fixed || exit 1 # exits if the output directory already exists for filename in *.sorted; do sed '/^>[0-9]*_/s//>/' "$filename" >"fixed/$filename" done 

    Это будет выполнять итерацию по всем именам файлов, соответствующим шаблону *.sorted , и для каждого из них запускается короткий сценарий sed .

    Сценарий sed найдет все заголовки Fasta, которые начинаются с цифры, за которой следует подчеркивание. Когда он найдет его, он заменит маркер заголовка, число и подчеркивание только маркером > заголовка.

    Результат будет записан в новые файлы в fixed подкаталоге.

    [ OP написал ] Я уверен, что есть простое решение sed, которое я не могу понять.

    Это правильно.

    [ OP написал ] Примечания: Символы всегда состоят из пяти цифр, за которыми следует подчеркивание, за которым следует Pseudomonas_etcetera. Эта строка всегда находится в начале своей строки и всегда начинается с «>». Все файлы имеют расширение “.sorted”.

    Ваше описание оператора pbm довольно точное, в том смысле, что оно может быть с пользой переведено в код sed . Вот как:

    • Эта строка всегда находится в начале своей строки и всегда начинается с “>”: regex => /^>/
    • Символы всегда состоят из 5 числовых символов: regex => /^>[0-9][0-9][0-9][0-9][0-9]/
    • За ним следует подчеркивание, за которым следует «Pseudomonas_etcetera»: regex => /^>[0-9][0-9][0-9][0-9][0-9]_Pseudomonas_etcetera/
    • Основной синтаксис команды замены в sed : s/regex/rpl_str/ , означающий, что любая часть пространства шаблона (обычно текущая строка, или запись) соответствует регулярному выражению (на LHS s/// команда, должна быть заменена строкой замены в RHS части команды s/// .
    • Итак, ваша команда сделать замену:
    • sed -e 's/^>[0-9][0-9][0-9][0-9][0-9]_Pseudomonas_etcetera/>Pseudomonas_etcetera/' inp1.sorted
    • Отказ от ответственности: не проверено.