linux - awk -F 命令根据第一个匹配的模式进行打印

标签 linux bash shell unix awk

如果 2 个字符串立即匹配,我正在使用 awk -F 命令打印下一组单词。

如果其中一个搜索关键字在变量中重复,则它采用最后匹配的关键字模式。但我想要第一个匹配的模式。

编辑: 在下面的示例中,我需要搜索 CREATETABLE 关键字,它们可能出现在任何行或被任何单词分割.不管它是什么,如果 CREATE & TABLE 关键字匹配,打印下一个元素如下。

a="Hello I have a CREATE set or multiset TABLE as TABLE (uid, cid, mid)"
echo "$a" | awk -F"CREATE.*TABLE" '{print $2}'
returns: as (uid, cid,mid)

但预期输出是

as TABLE (uid, cid, mid)

最佳答案

大多数处理正则表达式的工具都会寻找最左边最长的匹配字符串。在你的情况下:

a="Hello I have a CREATE set TABLE as TABLE (uid, cid, mid)"
echo "$a" | awk -F"CREATE.*TABLE" '{print $2}'

因为您在输入行中两次使用 TABLE 一词,所以您的正则表达式中的 TABLE 将匹配第二个,因此结果是可能的最长匹配。在 awk 中无法更改正则表达式匹配的行为,其他工具可能有选项让您请求最短而不是最长的匹配,但 awk 没有。

您可能想写的是:

echo "$a" | awk -F'CREATE +[^ ]+ +TABLE' '{print $2}'
 as TABLE (uid, cid, mid)

关于linux - awk -F 命令根据第一个匹配的模式进行打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22385647/

相关文章:

php - shell输出到网络

linux - 在 Docker for Windows 中创建符号链接(symbolic link)失败,还不支持吗?

linux - Docker 命令挂起而没有响应

bash - 立即发现并非所有环境变量都已在 qsub 命令行上定义

linux - bash 脚本杀死竞争条件

linux - 获取最新的日志文件并存储在变量中

python-3.x - 仅将最后一个 shell 命令的标准输出放入 Python 变量中

python - ${PYTHON :-python} in shell script and how to change 的含义

shell - 从 netstat 输出中提取 IP

linux - 历史扩展在脚本中不起作用