regex - grep - 模式作为变量
问题描述
文件名:Data.txt
在这个文件里面:
...
3754 Skype Helper
375 Skype Helper
37 Skype
...
文件名:shell.sh
#!/bin/bash
IFS='
'
var="Skype"
grep "\d\+\s\+${var}$" /Users/run/Documents/Data.txt >> /Users/run/Documents/output.txt
输出应该是:
37 Skype
但
我得到:
3754 Skype Helper
375 Skype Helper
37 Skype
非常感谢
解决方案
您正在使用不支持 PCRE (Perl-like) 的 BRE POSIX 模式\d
,\s
您可以\d
用[0-9]
括号表达式和\s
POSIX[[:space:]]
字符类替换:
grep "[0-9]\+[[:space:]]\+${var}\$"
请注意,您可以转义最后一个$
以使其成为明确的文字美元符号,但这不是必需的,因为尾随的美元被正确解析为字符串符号的结尾,这也可以:
grep "[0-9]\+[[:space:]]\+${var}$"
如果您不想过度转义,可以使模式 POSIX ERE 兼容:
grep -E "[0-9]+[[:space:]]+${var}$"
^^
您实际上可能会继续使用\d
,\s
如果您告诉grep
使用 PCRE 正则表达式引擎来解析模式:
grep -P "\d+\s+${var}$"
^^
请参阅在线演示。
推荐阅读
- javascript - Sap ui5:为什么 attachEvent 方法不适用于“mouseenter”事件?
- javascript - 如何显示来自表格条目的计算?
- python - Python:根据日期时间逐行扩展数据框
- mysql - 获取过去 12 个月内没有活动的用户
- java - 使用 Spring JPA 在表中使用双引号将字符串值持久化
- laravel - Laravel 之谜 - 两种相似的项目类型在同一用例中产生 2 个不同的查询字符串
- scala - 不推荐使用 ReactiveMongo 中的方法 find 。使用带有可选投影的“查找”
- javascript - scss中的反向查找选择器
- javascript - 嵌入数据表组件时获取函数内部的行数据
- liquibase - Liquibase 没有按依赖顺序执行更改日志文件