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