【发布时间】:2012-02-21 15:25:31
【问题描述】:
我有一个文件,其中包含以下格式的行:
w1#1#x w2#4#b w3#2#d ...
行中的每个单词(标记)(例如 w1#1#x)由 3 个部分组成,第一个显示一些索引(在这种情况下为 w1),第二个是一个整数(在这种情况下为 1),并且第三个是字符(本例中为 x)
现在,对于每个单词(令牌),我需要打印一个附加字段,该字段将根据第二部分和第三部分的值计算(ie,第四部分将是第二部分的函数和第 3 部分),输出文件应如下所示:
w1#1#x#f1 w2#4#b#f2 w3#2#d#f3 ...
在哪里
f1 = 函数(1,x), f2 = 函数(4,b), f3 = 函数(2,d)
现在,使用 sed 模式,我可以识别每个单词(标记)中的组件,例如,
回显 $line | sed "s/([^#])#([^#])#([^#]*) /\1#\2#\3 /g"
其中 \2 和 \3 是 模式的一部分(我称它们为 模式的一部分,因为 this link)
现在,我需要使用 \2 和 \3 计算第四部分。我已经定义了一个 shell 函数 getInfo(),它接受 2 个参数并进行所需的计算并将第四部分返回给我。问题是在 sed 命令中插入此函数。我尝试了以下操作:
回显 $line | sed "s/([^#])#([^#])#([^#]*) /\1#\2#\3`getInfo \2 \3` /g "
但这不起作用。 Shell 没有接收模式的部分作为参数。
所以问题是:
如何将 sed 模式的部分传递给 shell(函数)?
我可以轻松编写一个 shell 脚本,它会逐字拆分行并完成所需的工作,然后将文件缝合回去,但如果 shell 可以接收 部分模式,我将不胜感激 em> 作为 sed 命令中 sed 的参数。
问候,
萨利尔·乔希
【问题讨论】: