SED соответствует шаблону N раз

14

Я хочу разбить файл на куски по 2 слова в каждом.

$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

Я ожидал, что последняя команда даст тот же результат, что и предыдущая. Что случилось?

user13107
источник

Ответы:

17

Извините, похоже, я понял это сразу после публикации.

Это должно быть

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

Очевидно, скобки необходимы, чтобы позволить sed применять {2}условие ко всему шаблону, word.а не только к предыдущему пробелу.

user13107
источник
3
или используйтеsed -E 's/(word. ){2}/&\n/g' tmp
Cyrus
1

Для общего случая совпадения N раз:

$ perl -ple '$N=3;s/(\S+ ){$N}\K/\n/g' tmp
word1 word2 word3 
word4 word5 word6 
word7
Джозеф Р.
источник