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

相关内容