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がword.直前のスペースだけでなくパターン全体に{2}条件を適用するために、括弧が必要なようです。


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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.