我有一个文本文件,例如:
$ cat test.txt
one
two
--------------
three
four
--------------
five
six
--------------
seven
eight
--------------
nine
ten
我正在尝试使用awk
来捕获--------------
两行之间的文本。
我正在尝试的输出:
$ cat test.txt
three
four
seven
eight
这是我到目前为止所拥有的
awk '/^--------------$/{flag=1;next}/^--------------$/{flag=0}flag' test.txt
three
four
five
six
seven
eight
nine
ten
答案 0 :(得分:1)
$ awk -v RS='\n-+' '!(NR%2)' file
three
four
seven
eight
需要多字符RS支持(gawk)。它定义了记录分隔符,因此在分隔符之间进行记录。在这里,我们要求打印偶数记录。
或者,
$ awk '/^-+$/{f=!f; if(f) print ""; next} f' file
three
four
seven
eight
这类似于您的解决方案,在每次出现图案时翻转标志,并在设置标志时打印。在分隔组之前添加一个空行。
答案 1 :(得分:1)
$ awk '{x=sub(/^-+$/,"")} f; x{f=!f}' file
three
four
seven
eight
sub()用空格替换所有---
行,并保存它在x
中这样做的事实,以记住当前行是---
行。 x(f=!f}
每f
行的---
在0和1之间切换。由于f;
是给定真实条件的默认操作,因此f
为true时,{print}
打印当前行。
答案 2 :(得分:0)
您可以这样作弊:
sed 's/^-\{14\}//' file