wzór dopasowania sed razy N razy


14

Chcę podzielić plik na części po 2 słowa.

$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

Spodziewałem się, że ostatnie polecenie da taki sam wynik jak poprzednie. Co jest nie tak?

Odpowiedzi:


17

Przepraszam, wygląda na to, że wymyśliłem to zaraz po opublikowaniu.

To musi być

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

Najwyraźniej nawiasy są potrzebne, aby sed mógł zastosować {2}warunek do całego wzorca, word.a nie tylko przed spacją.


3
lub użyjsed -E 's/(word. ){2}/&\n/g' tmp
Cyrus


1

W ogólnym przypadku dopasowania N razy:

$ perl -ple '$N=3;s/(\S+ ){$N}\K/\n/g' tmp
word1 word2 word3 
word4 word5 word6 
word7
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.