在Tcl脚本中调用的sed命令中使用变量

在Tcl脚本中调用的sed命令中使用变量,tcl,Tcl,我想在tcl脚本中使用以下命令: sed -n '452,$ { /wire/ {p;q} }' /tmp/foo 为此,我将此命令更改如下: set MIDLINE2 [ exec sed -n {1134,$ {/wire/{=;q}}} foo.txt ] 它给了我正确的答案,但在1134处,我想使用变量$MIDLINE,它的值为1134。我该怎么做?请提出一些建议。这是一个简单的报价问题。您正在使用大括号来禁止变量替换。由于需要变量替换,所以需要使用其他方法 set MIDLINE

我想在tcl脚本中使用以下命令:

sed -n '452,$ { /wire/ {p;q} }' /tmp/foo
为此,我将此命令更改如下:

set MIDLINE2 [ exec sed -n {1134,$ {/wire/{=;q}}} foo.txt ] 

它给了我正确的答案,但在1134处,我想使用变量$MIDLINE,它的值为1134。我该怎么做?请提出一些建议。

这是一个简单的报价问题。您正在使用大括号来禁止变量替换。由于需要变量替换,所以需要使用其他方法

set MIDLINE2 [ exec sed -n "$MIDLINE,\$ {/wire/{=;q}}" foo.txt ]

请注意,您必须在文本
$
前面加一个反斜杠,否则Tcl也会尝试替换它。

这是一个简单的引用问题。您正在使用大括号来禁止变量替换。由于需要变量替换,所以需要使用其他方法

set MIDLINE2 [ exec sed -n "$MIDLINE,\$ {/wire/{=;q}}" foo.txt ]

请注意,您必须在文本
$
前面加一个反斜杠,否则Tcl也会尝试替换它。

+1从技术上讲,美元符号不必转义。变量替换仅在美元符号后跟变量名称、开括号或大括号时发生--@user1468315如果对您有效,请单击答案旁边的复选标记将问题标记为已解决。+1从技术上讲,美元符号不必转义。变量替换仅在美元符号后跟变量名、开括号或大括号时发生--@user1468315如果对您有效,请单击答案旁边的复选标记将问题标记为已解决。问题是与相关的后续问题。问题是与相关的后续问题。