So fügen Sie eine Zeichenfolge oder eine neue Zeile vor einem Muster "Verwenden von SED" ein (ohne das Muster zu ersetzen) In MAC OS

7

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%     
sam 25.10.2013, 12:32
quelle

9 Antworten

9

Mit sed :

%Vor%

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:

%Vor%

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).

    
fedorqui 25.10.2013 12:35
quelle
3

grep -oP mit Lookahead regex wird einfacher:

%Vor%     
anubhava 25.10.2013 12:35
quelle
2

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".

    
Digital Trauma 12.12.2013 05:27
quelle
1
%Vor%

posix compliant und erstellt keine neue Zeile, wenn die Zeile mit einem b beginnt

    
NeronLeVelu 06.12.2013 10:45
quelle
1

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.

    
potong 06.12.2013 13:33
quelle
1

sed -e 's / bb / \ nn / g 'input.txt

Ich habe das zur Arbeit gebracht. Es ist deinem ursprünglichen Versuch sehr ähnlich. Ich bin auf einem iMac, also bin ich mir ziemlich sicher, dass das auch für dich funktioniert.

    
jeff 10.12.2013 01:37
quelle
1

Wenn Sie eine neue Zeile vermeiden möchten, wenn b am Anfang der Zeile auftritt und dies alles POSIX-konform.

%Vor%     
Hynek -Pichi- Vychodil 10.12.2013 19:03
quelle
1

Eine hässliche awk version:)

%Vor%

A gnu awk version

%Vor%

Ein weiterer awk . Ersetzen Sie b oder Gruppe von b durch newline und selbst &

%Vor%     
Jotne 25.10.2013 12:55
quelle
1

Sie könnten sagen:

%Vor%

oder

%Vor%

Damit sed die Regex als erweiterte reguläre Ausdrücke interpretiert, könnten Sie die Option -E verwenden:

%Vor%     
devnull 12.12.2013 10:12
quelle

Tags und Links