的sed在我的tcsh脚本我有这个TCSH Shell脚本:替换变量使用内部文件
sed -i "s/^${y}$//g" $x
我如何得到这个工作?要么我没有改变,要么像非法变量名称或变量名称一样必须包含字母数字字符。尝试了“”的不同组合。 ''在sed中。示例
sed 's/^'"${y}"'$//g' $x
的sed在我的tcsh脚本我有这个TCSH Shell脚本:替换变量使用内部文件
sed -i "s/^${y}$//g" $x
我如何得到这个工作?要么我没有改变,要么像非法变量名称或变量名称一样必须包含字母数字字符。尝试了“”的不同组合。 ''在sed中。示例
sed 's/^'"${y}"'$//g' $x
在双引号字符串中扩展变量名称在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
中的字符串。这似乎是你想要做的,但我不能确定。