例如,有一段文字
[task,line:111] first
second
[demo,line:222] first
[test,line:333] first
[task,line:444] first
second
third
[task,line:555] first
我只想要有[task]的行和下一行,直到另一个[*]出现。如下所示
[task,line:111] first
second
[task,line:444] first
second
third
[task,line:555] first
我如何使用awk或shell脚本中的其他工具来完成它?我只知道我可以使用
awk '/regex/{print $0>"'$output'"}' $file
以获取带有[task]的行并将其重定向到另一个文件。请帮助我完成此操作。
3条答案
按热度按时间wbgh16ku1#
请尝试以下操作:
那么output_file将如下所示:
rxztt3cl2#
您可以使用此
awk
:2hh7jdfx3#
我会利用GNU
AWK
来完成这个任务,让file.txt
内容然后
给出输出
说明:我告诉GNU
AWK
行分隔符(RS
)是[
和输出行分隔符(ORS
)是空字符串,即行是[
和[
之间的东西,则对于在Iprint
内具有task
的每一行,其具有前置的[
,因为ORS是空字符串,所以没有添加多余的换行符(所需的换行符已经在行中)。如果想了解更多关于RS
或ORS
的信息,请阅读8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR