awk:显示匹配的正则表达式(多行)
我有一个看起来像这样的文件:
SF:/home/developer/project/test/resources/somefile.jsDA: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 / / resources /
…”)。对于此示例,我想要的输出将是:
SF:/home/developer/project/test/resources/somefile.jsDA:1,2
DA:3,2
end_of_record
我想在 环境中执行此操作。
我的第一个尝试是使用“ 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”的块?
回答:
您需要一个标志:
awk '/^SF.*test.*/{f=1}f;/end_of_record/{f=0}' yourFile
以上是 awk:显示匹配的正则表达式(多行) 的全部内容, 来源链接: utcz.com/qa/421537.html