在 bash 我有一个字符串变量tempvar
,它是这样创建的:
tempvar=`grep -n 'Mesh Tally' ${meshtalfile}`
meshtalfile
是一个(大)输入文件,其中包含一些标题行和许多数据行块,每个数据行都由一个开始行标记,该行在上面的 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
。尝试使用 number34
而不是返回9
而不是4354479
. 似乎 sed 只返回数字的最后一位 - 这肯定违反了贪婪匹配的原则?奇怪的是,当我将(
左括号移动到包含几个字符时.*
,它会将整行返回并包括它之前返回的单个字符。它肯定不能在一种情况下贪婪而在另一种情况下反贪吗?希望我刚刚用语法做了一些愚蠢的事情......