Ich habe also eine Zeichenfolge, die so aussieht:
AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUGA
Und ich möchte die Zeichenfolge in 3-stellige Abschnitte aufteilen, die durch ein '+' - Zeichen getrennt sind.
AUG+GCC+AUG+GCG+CCC+AGA+ACU+GAG+AUC+AAU+AGU+ACC+CGU+AUU+AAC+GGG+UGA
Und das möchte ich mit meinem guten Freund machen sed
.
Ich habe es versucht
cat codons | sed -r 's/([A-Z]\{3\})/\1\+/g'
... ohne Erfolg.
Welchen sed
Befehl kann ich verwenden?
text-processing
sed
ixtmixilix
quelle
quelle
Antworten:
Da Sie kein Trailing möchten
+
, können Sie Folgendes tun:Das heißt, folddie Zeilen auf der 3Zeichen- wID und pastedie 3 Zeichenzeilen mit ihnen swerden +als dElimiter verwendet, was praktisch so ist, als würde jedes neue Zeilenzeichen außer dem letzten in ein geändert
+
. Wenn die Eingabe mehr als eine Zeile hatte, werden die Zeilen mit einer Zeile verbunden,+
die möglicherweise Ihren Wünschen entspricht oder nicht.Wenn Sie es brauchen
sed
, können Sie das Trailing+
nach entfernen :quelle
+$
ein Pluszeichen unmittelbar vor dem Ende einer Zeile übereinstimmt.fold -w3
Bricht die Zeichenfolge in 3 Zeichenzeilen.paste -sd+ -
verwandelt die Zeilenumbrüche in+
.Um sich an die Arbeit zu machen, müssen Sie den
{}
Symbolen nicht entkommen :quelle
Dies könnte für Sie funktionieren (GNU sed):
quelle
Wenn sed kein Muss ist, kann die Verwendung von Ruby eine Alternative sein. Der Ruby-Interpreter
ruby
kann wie sed und awk verwendet werden, indem er mit der-n
Option ausgeführt wird, mit der er über seine Eingabe iteriert. Der Interpreter kann dann mit einem Ruby-Einzeiler gespeist werden, indem er der-e
Option als Argument hinzugefügt wird (wodurch der Interpreter angewiesen wird, das Argument zu interpretieren,-e
anstatt in einer Datei nach einem Skript zu suchen).Für dieses spezielle Problem können Sie den folgenden Einzeiler verwenden (angepasst von /programming//a/3184271/789593 ):
Im Klartext ist es
scan(/.{3}|.+/)
in der Eingabezeichenfolge$_
(in diesem Fall wird erwartet, dass die Eingabe vom Standard-In stammt) und fügt jede Übereinstimmung in ein Array ein.join("+")
,puts
.Beispielsweise
Beachten Sie, dass kein abschließendes '+' hinzugefügt wird.
quelle