- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 bash 中我有一个字符串变量 tempvar
,它是这样创建的:
tempvar=`grep -n 'Mesh Tally' ${meshtalfile}`
meshtalfile
是一个(大)输入文件,其中包含一些标题行和许多数据行 block ,每行都标有在上面的 grep 中搜索的起始行。
在本例中,变量 tempvar
包含以下字符串:
5: Mesh Tally Number 4 977236: Mesh Tally Number 14 1954467: Mesh Tally Number 24 4354479: Mesh Tally Number 34
我现在希望提取与特定网格计数相关的行号 - 因此我定义了一个变量 meshnum1 等于 24
,并运行以下 sed 命令:
echo ${tempvar} | sed -r "s/^.*([0-9][0-9]*):\sMesh\sTally\sNumber\s${meshnum1}.*$/\1/"
这就是问题所在。我期望输出 1954467
,但我得到的是 7
。尝试使用数字 34
而不是返回 9
而不是 4354479
。似乎 sed 只返回数字的最后一位 - 这肯定违反了贪婪匹配的原则?奇怪的是,当我移动左括号 (
留下几个字符以包含 .*
时,它返回整行直到并包括它之前返回的单个字符.当然它不能在一种情况下贪婪而在另一种情况下反贪婪吗?希望我刚刚用语法做了一些愚蠢的事情......
最佳答案
问题是 .*
也很贪心,这意味着它也会得到所有数字。由于您强制它在 [0-9][0-9]*
部分中至少获得一位数字,因此它之前的 .*
将足够贪婪地离开后面的表达式只有一个数字。
解决方案可能是:
echo ${tempvar} | sed -r "s/^.*\s([0-9][0-9]*):\sMesh\sTally\sNumber\s${meshnum1}.*$/\1/"
现在 .*
和 [0-9][0-9]*
之间的 \s
明确强制那里在要匹配的数字前加一个空格。
希望这有帮助 =)
关于linux - sed 正则表达式不贪心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12638753/
>>> import re >>> p = re.compile('.*&l=(.*)(&|$)') >>> p.search('foo&l=something here&bleh').group(1
最近有一道面试题如下:我们得到了一个单词列表,我们想要格式化它们以最大化回车符的数量,同时将每行的字母数量保持在一个范围内。 例如,我们希望每行的字母范围为 5 - 10(含),一种解决方案是: he
我正在使用二维数组来处理游戏中的对象。数组的维度就像笛卡尔网格上的坐标。当玩家选择一个点时,我想从数组中收集 N 个最近的网格单元,即使该点不是有效的数组索引。 例子:从 [0,0] 到 [10,10
我在 Hibernate 之上使用 Olingo 1.2。 我有一个返回 250 行的请求,每行以一对多关系链接到另一个表。 我执行 $expand 以获取子表中的所有数据,但是当我检查在数据库中执行
我正在 ANTLR4 中构建语法,但收到此警告 TL4.g4:224:12: greedy block ()* contains wildcard;非贪婪语法 ()*?可能是首选 这是它引用的代码行
In the default greedy mode, all data offered to targets are accepted, even if the other target doesn
假设我有 n 个盒子,每个盒子里面都有一些值 b[i] .我可以保证对一组框进行排序,使得 b[1] j; { min_{k=i}^j (c[k] + max(T(i, k-1)
本文已收录到 AndroidFamily ,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周末是 LeetCode 第 339 场周赛,你参加
什么是 PHP 中的“贪心 token 解析”?我在 Codeigniter 指南中找到了这个: “除非需要解析变量,否则始终使用单引号字符串,并且在确实需要解析变量的情况下,使用大括号防止贪婪的标记
本文已收录到 AndroidFamily ,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周末是 LeetCode 第 337 场周赛,你参加
我是一名优秀的程序员,十分优秀!