sedはパターンとN回一致します。

sedはパターンとN回一致します。

ファイルをそれぞれ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

最後のコマンドが前のコマンドと同じ結果を提供すると予想しました。何が問題なの?

答え1

申し訳ありません。投稿後に発見したようです。

そうする必要がある

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

sedに前のスペースだけでなくパターン全体{2}に条件を適用させるには、かっこが必要です。word.

答え2

別の方法sed

$ sed 's/ /\x1&\x2/g; s/\([^\x1]*[\x1][^\x2]*[\x2][^\x1]*\)[\x1][^\x2]*[\x2]/\1\
/g; s/[\x1\x2]//g'

答え3

N回一致する一般的な場合:

$ perl -ple '$N=3;s/(\S+ ){$N}\K/\n/g' tmp
word1 word2 word3 
word4 word5 word6 
word7

関連情報