我想将一个文件分成每个块 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