2014-11-14 73 views
1

的sed在我的tcsh脚本我有这个TCSH Shell脚本:替换变量使用内部文件

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

我如何得到这个工作?要么我没有改变,要么像非法变量名称或变量名称一样必须包含字母数字字符。尝试了“”的不同组合。 ''在sed中。示例

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

回答

2

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

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

外壳或环境变量$y的价值应该被正确地扩大,但外壳会尽量扩大$/$/值,它作为错误信息说是非法的变量名。

你的第二个命令:

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

几乎正确;它只是缺少-i参数sed

这应该工作: 。 SED的/ ^“ ”$ {Y}“ '$ // G' $ X

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

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

或者你也可以做这样的:从双引号单引号

sed -i "s/^$y"'$'"//g" $x 

这最后一个版本开关和回双,只是围绕$字符。这是一个值得强调的问题,无论您是仅使用您不希望展开的$附近的单引号,还是仅使用您希望展开的$y左右的双引号。

更简单地说,你可以通过\它前面逃避双引号字符串$字符(我认为这可能是特定于TCSH;原CSH可能没有能够做到这一点)。所以我觉得这是首选的方法 - 假设你有tcsh的,而不是老式的CSH:

sed -i "s/^$y\$//g" $x 

我假设你想要做的是更新通过$x在地方命名的文件,删除包含在每行开头的$y中的字符串。这似乎是你想要做的,但我不能确定。