Spielmuster N-mal sedieren


14

Ich möchte eine Datei in Stücke mit jeweils 2 Wörtern aufteilen.

$cat tmp
word1 word2 word3 word4 word5 word6 word7
$sed -e 's/word. word. /&\n/g' tmp
word1 word2 
word3 word4 
word5 word6 
word7
$sed -e 's/word. \{2\}/&\n/g' tmp
word1 word2 word3 word4 word5 word6 word7

Ich habe erwartet, dass der letzte Befehl dasselbe Ergebnis liefert wie der vorherige. Was ist falsch?

Antworten:


17

Entschuldigung, es scheint, als hätte ich es gleich nach dem Posten herausgefunden.

Es muss sein

sed -e 's/\(word. \)\{2\}/&\n/g' tmp

Anscheinend werden die Klammern benötigt, damit sed die Bedingung {2} auf das gesamte Muster word.und nicht nur auf das vorangestellte Leerzeichen anwendet .


3
oder verwenden Siesed -E 's/(word. ){2}/&\n/g' tmp
Cyrus


1

Für den allgemeinen Fall der N-fachen Übereinstimmung:

$ perl -ple '$N=3;s/(\S+ ){$N}\K/\n/g' tmp
word1 word2 word3 
word4 word5 word6 
word7
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.