Ich habe eine Datei mit folgendem Inhalt:
%Vor%und ich brauche eine Ausgabe wie:
%Vor% Ich brauche eine neue Zeile, die vor dem ersten Auftreten von 'b'
hinzugefügt wird. Ich brauche nur SED-Befehl in bash zu verwenden
Ich verwende den folgenden Befehl. Ich weiß, es ist jetzt der perfekte ..
Kann mir jemand einen besseren Befehl geben? Pl Hinweis nur SED-Befehl muss ich in bash verwenden
%Vor% Mit sed
:
sed -r
erlaubt es, Blöcke mit ()
abzufangen und sie mit zurückzuschreiben. Der Block fängt ihn
[b]+
, also "one or more b's"
ab und gibt ihn zurück, gefolgt von einer neuen Zeile.
Wie ich sehe, benutzen Sie sed -i
, es ist auch gut zu tun:
Auch einfacher ( Danke Glenn Jackman !)
%Vor% Er ersetzt alle Sequenzen von "b" und ersetzt diese durch eine neue Zeile, gefolgt von derselben Sequenz von "b" ( &
steht für das, was auf der linken Seite von s///
gefunden wurde).
Wenn Ihre Eingabezeichenfolge wirklich nur a
und b
Zeichen enthält, dann ist das Problem meines Erachtens eine einfache Ersetzung aller Instanzen von ab
mit a<newline>b
. Wenn dies der Fall ist, können Sie sed
ganz auslassen und die Funktion Shell-Parametererweiterung verwenden in bash :
Am Terminal:
%Vor%Oder in einem Shell-Skript:
%Vor%Dies funktioniert bei OSX 10.8.5.
Diese Informationen sind auch auf der Bash-Manpage gehostet von apple.com. Suchen Sie auf dieser Seite nach "parameter / pattern".
posix compliant und erstellt keine neue Zeile, wenn die Zeile mit einem b beginnt
Dies könnte für Sie funktionieren:
%Vor% Dies durchläuft die aktuelle Zeile und ersetzt alle ab
-Kombinationen durch a\nb
. Es verwendet den Hold-Space-Nebeneffekt, dass eine neue Zeile immer vorhanden ist, wenn eine neue Instanz von sed erstellt wird.
Natürlich:
%Vor%oder:
%Vor%Ist viel einfacher, aber hängt wahrscheinlich von einer GNU-Version von sed oder bash ab.
Wenn Sie eine neue Zeile vermeiden möchten, wenn b
am Anfang der Zeile auftritt und dies alles POSIX-konform.