我有一个这样的文本文件:
line 1
line 2
*
line 3
*
line 4
line 5
line 6
*
line 7
line 8
我想写出两种模式之间的部分(在这种情况下为*)。所以如果我想要第一部分,我想得到
line 1
line 2
如果我想获得第三个,它应该是
line 4
line 5
line 6
返回的行应该没有星号,重要的是开头或结尾没有星号。 我正在考虑将整个文本“拆分”为使用'*'作为带有sed或awk的分隔符的列,但我没有成功。有人可以帮忙吗?非常感谢。
这就是我的尝试:
sed "/^%/{x;s/^/X/;/^X\\{$choice\\}$/ba;x};d;:a;x;:b;$!{n;/^%/!bb}" "$file"
但这需要在开头有一个*,它还会打印前后的星号。
答案 0 :(得分:1)
$ awk -v num=3 '$0=="*"{ if (++count >= num) exit; next } num-1==count' data
line 4
line 5
line 6
$ awk -v num=1 '$0=="*"{ if (++count >= num) exit; next } num-1==count' data
line 1
line 2
答案 1 :(得分:1)
awk
救援
$ awk -v RS='\n\\*\n' -v n=3 'NR==n' file
line 4
line 5
line 6
这需要多字符记录分隔符支持(gawk
)。
另一种选择,计算星星
$ awk -v n=3 '/^*/{c++;next} c==n-1' file
line 4
line 5
line 6