Итак, у меня есть строка, которая выглядит следующим образом:
AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUGA
И я хочу разбить строку на 3-символьные куски, разделенные знаком «+».
AUG+GCC+AUG+GCG+CCC+AGA+ACU+GAG+AUC+AAU+AGU+ACC+CGU+AUU+AAC+GGG+UGA
И я хочу сделать это с моим хорошим другом sed
.
Я старался
cat codons | sed -r 's/([A-Z]\{3\})/\1\+/g'
... безуспешно
Какую sed
команду я могу использовать?
text-processing
sed
ixtmixilix
источник
источник
Ответы:
Так как вы не хотите трейлинг
+
, вы можете сделать:То есть, foldлинии на 3характер wIDþ, и pasteэти 3 строки символов с ними sэльфы с +как delimiter , который в действительности является , как меняется каждый символ новой строки , но последний в
+
. Если у ввода было более одной строки, вы получите те строки, которые соединены с,+
что может или не может быть тем, что вы хотите.Если вам это нужно
sed
, вы можете удалить трейлинг+
после:источник
+$
соответствует символу плюса непосредственно перед концом строки.fold -w3
разбивает строку на 3 строки символов.paste -sd+ -
превращает в новой строки+
.чтобы работать, вам не нужно экранировать
{}
символы:источник
Это может работать для вас (GNU sed):
источник
Если sed не является обязательным, использование Ruby может быть альтернативой. Интерпретатор Ruby
ruby
, можно использовать как sed и awk, запустив его с-n
опцией, которая заставляет его перебирать свой ввод. Затем интерпретатор может быть передан с помощью однострочной строки Ruby, добавив его в качестве аргумента в-e
опцию (которая говорит интерпретатору интерпретировать аргумент,-e
а не искать скрипт в файле).Для этой конкретной проблемы вы можете использовать следующую однострочную строку (адаптировано с https://stackoverflow.com/a/3184271/789593 ):
На простом языке это
scan(/.{3}|.+/)
во входной строке$_
(в этом случае ожидается, что ввод поступит из стандарта in) и помещает каждое совпадение в массив,join("+")
,puts
.Например
Обратите внимание, что он не добавляет завершающий символ «+».
источник