我有一个看起来像这样的文件:
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: ...
end_of_record
DA:x,x
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通话中遗漏了一些东西。
examplefile
awk
我如何只获得第一行中带有“ test”的块?
您需要一个标志:
awk '/^SF.*test.*/{f=1}f;/end_of_record/{f=0}' yourFile