Это то, что вы пытаетесь сделать?
$ awk_cmd() {
awk -v RS='^$' -v OFS='","' '
match($0,/\s*\(\s*(\w+)\s*,\s*\\\s*(\w+)\s*,\s*\\\s*(\w+)/,g) {
print "\"" FILENAME, NR, g[1], g[2], g[3] "\""
}
' "$@"
}
$ awk_cmd file
"file","1","Match_Group_1","Match_Group_2","Match_Group_3"
$ cat file | awk_cmd
"-","1","Match_Group_1","Match_Group_2","Match_Group_3"
Поскольку ваше регулярное выражение должно занимать несколько строк, неясно, какое значение вы ожидаете, что NR будет иметь.Выше я рассматриваю весь входной файл как одну запись, так что NR всегда будет просто 1. Если вы пытаетесь напечатать номер строки, где начинается строка, соответствующая регулярному выражению, то это будет:
$ awk_cmd() {
awk -v RS='^$' -v OFS='","' '
match($0,/(.*)\s*\(\s*(\w+)\s*,\s*\\\s*(\w+)\s*,\s*\\\s*(\w+)/,g) {
nr = gsub(/\n/,"&",g[1]) + 1
print "\"" FILENAME, nr, g[2], g[3], g[4] "\""
}
' "$@"
}
$ awk_cmd file
"file","3","Match_Group_1","Match_Group_2","Match_Group_3"
Выше используется GNU awk для RS с несколькими символами и 3-й аргумент для match () и \s
и \w
сокращение для [[:space:]]
и [[:alnum:]_]
.