2014-02-18 3 views
5

Wie geben Sie 4 Leerzeilen ein, bevor das Muster übereinstimmt?Wie fügt man 4 Zeilenumbrüche ein, bevor Muster mit SED übereinstimmen?

kann ich

tun
sed '/patterntosearch4/G' 1.txt > 2.txt 

nach jedem Muster eine neue Datei (2.txt) mit einer Leerzeile zu erstellen.

Aber wie man 4 leere Zeilen VOR der Übereinstimmung eingeben?

Manpage SED schien keine Antworten zu geben.

Jede Hilfe wird sehr geschätzt!

+1

Regex mit Rückverweis. –

Antwort

5

Dies könnte für Sie arbeiten (GNU sed):

sed '/patterntosearch4/i\\n\n\n' file 

oder wenn Sie es vorziehen:

sed -e '/patterntosearch4/!b' -e 'G' -e 's/\(.*\)\(.\)/\2\2\2\2\1/' file 

BTW, wie Sie verwenden, um die G Befehl, der eine neue Zeile der Zeile nach einfügt Mit der Musterübereinstimmung vermutete ich, dass Sie eine neue Zeile vor der Zeile mit der Musterübereinstimmung einfügen wollten.

+0

Danke, deine 2. Antwort hat mein Problem gelöst! PS Der erste hat gerade 4 mal den Buchstaben N davor generiert, weiß nicht warum? –

0

Es gibt viele weitere Möglichkeiten, aber hier haben Sie eine sehr einfach:

sed 's/patterntosearch4/\n\n\n\n&/' 1.txt > 2.txt 
1

mit GNU-sed Sie tun können:

sed -i.bak 's/pattern/\n\n\n\n&/' file 
3

eine Alternative von sed, ohne Substitution (s/../../) :

sed '/pat/{x;p;p;p;p;x}' 

Test:

kent$ (master|✔) seq 5|sed '/3/{x;p;p;p;p;x}'  
1 
2 




3 
4 
5 
Verwandte Themen