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

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

Ответы:


17

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

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

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

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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.