我有一个看起来像这样的文件:
SF:/home/developer/project/test/resources/somefile.js
DA:1,2
DA:3,2
end_of_record
SF:/home/developer/project/src/resources/otherfile.js
DA:9,2
DA:15,2
DA:22,2
end_of_record
...some more SF:/home/xxx and end_of_record lines...
该文件由以 . 开头SF: ...
和结尾的块组成end_of_record
。请注意,( DA:x,x
) 之间的行数可以不同。我想打印第一行中包含字符串“test”的所有块(如此处的“SF:/home/developer/ test /resources/...”)。对于这个例子,我想要的输出是:
SF:/home/developer/project/test/resources/somefile.js
DA:1,2
DA:3,2
end_of_record
我想在Linux环境中执行此操作。
我的第一次尝试是使用“sed”命令来执行此操作,但经过一些研究后,似乎“awk”是执行多行操作的更合适的工具。
使用 awk 和 Regex,这是我到目前为止的命令:
awk '/SF[:\/a-zA-Z0-9]*test[\/A-Za-z0-9.,:\n]*end_of_record/ {print}' FS="\n" RS="" examplefile
但它输出的是完整的examplefile
,而不仅仅是第一行中包含“test”的块。我不确定我的正则表达式是否错误,或者我的awk
通话中是否遗漏了某些内容。
我怎样才能只得到第一行带有“test”的块?