Удаление вариабельной строки на многих файлах

sudo dnf install /path/to/package.rpm будет воздействовать на пакет по указанному пути.

0
01.08.2018, 07:47
3 ответа

sedнеужели:

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

если ваш шаблон точно в вопросе:

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

Используя стандарт 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.

1
28.01.2020, 02:16

[OP wrote] Pretty sure there is a simple sed solution which I can't seem to figure out.

Верно.

[OP wrote] Notes: The characters are always five numbers followed by an underscore followed by Pseudomonas_etcetera. This string is always at the beginning of its line and it always starts with ">". All files have a ".sorted" extension.

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

  • Эта строка всегда находится в начале своей строки и всегда начинается с ">" :регулярное выражение =>/^>/
  • Символы всегда 5 числовых символов :регулярное выражение =>/^>[0-9][0-9][0-9][0-9][0-9]/
  • После символа подчеркивания следует "Pseudomonas _etcetera" :регулярное выражение =>/^>[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
  • Отказ от ответственности :Не проверял.
1
28.01.2020, 02:16

Теги

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