regex - 在 awk 中使用匹配模式

标签 regex awk

我想使用 awk 打印匹配的模式。不是场,不是线。

在 vi 中,您可以将匹配的模式放在替换中,方法是用圆括号括起来并用花括号和数字引用它,如下所示:

:s/bufid=([0-9]*)/buffer id is {\0}/

parens 之间匹配的部分被记住并可以使用。

在perl中,类似

$_ = "Hello there, neighbor";
if (/\s(\w+),/) {             # memorize the word between space and comma
  print "the word was $1\n";  # the word was there
}

有什么方法可以用 awk 做类似的事情吗?我只想提取缓冲区 ID 并打印它,而且只有它。

输入行是 XML,并且将包含(除其他外)'bufId="123456"'。我要打印“123456”

所以...

awk < file.xml '/bufId="([0-9]*)"/ { print X; }'

我在 X 所在的位置放什么?

这能做到吗?

最佳答案

使用 gawk

awk '{print gensub(/.*bufId="([0-9]*)"/,"\\1",1)}'

如果您想要引用结果,您还必须捕获引号。

关于regex - 在 awk 中使用匹配模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49185024/

相关文章:

android - 处理剧透 BBcode Android

javascript - Google Calendar API 日期输出的正则表达式

java - 通过不是字符串的开头来匹配正则表达式?

linux - 如何显示多个文件的第三行

bash - 如何使用 bash 从模板生成脚本文件?

shell - awk获取下一行列的值并将其添加到shellscript中的当前行

JavaScript 正则表达式空白字符

javascript - 在 JavaScript 中使用正则表达式格式化圣经经文引用

string - 如何使用 sed/awk 连接连续的非空行?

python - 使用awk根据某些行中的值过滤文本文件