TCSH Shell脚本:使用sed inside文件替换变量

时间:2014-11-14 22:26:10

标签: variables sed tcsh eol

在我的tcsh脚本中我有这个

sed -i "s/^${y}$//g" $x

我如何让它工作?要么我没有变化,要么像非法变量名称或变量名称必须包含字母数字字符。试过“”的不同组合。 ''在sed内。实施例

sed 's/^'"${y}"'$//g' $x

1 个答案:

答案 0 :(得分:2)

在双引号字符串中扩展变量名在tcsh中很棘手。在你的命令中:

sed -i "s/^${y}$//g" $x

应正确扩展shell或环境变量$y的值,但shell会尝试将$/扩展为$/的值,正如错误消息所示非法变量名。

你的第二个命令:

sed 's/^'"${y}"'$//g' $x

几乎正确;它只是缺少-i的{​​{1}}参数。

这应该有效: 。     sed's / ^'“$ {y}”'$ // g'$ x

在这种情况下,不需要sed{ },所以你可以写:

y

或者你可以这样做:

sed 's/^'"${y}"'$//g' $x

最后一个版本从双引号转换为单引号,然后返回到双倍,只是围绕sed -i "s/^$y"'$'"//g" $x 字符。这是一个重点问题,您是否只想在不需要展开的$周围使用单引号,或者只在$周围使用双引号,而您希望扩展它。

更简单地说,你可以在双引号字符串中转义$y字符,方法是在$前面加上它(我认为这可能特定于tcsh;原来的csh可能无法使用要做到这一点)。所以我认为这是首选方法 - 假设您有tcsh而不是旧式csh:

\

我假设您要执行的操作是更新sed -i "s/^$y\$//g" $x 命名的文件,删除每行开头$x中包含的字符串。这似乎是你想要做的,但我不能确定。