在我的tcsh脚本中,我有一个
sed -i "s/^${y}$//g" $x我怎么才能让这个起作用?要么我没有得到任何更改,要么出现了一些错误,比如非法变量名或变量名必须包含字母数字字符。尝试了"“的不同组合。'‘在联邦政府内部。示例
sed 's/^'"${y}"'$//g' $x发布于 2014-11-14 22:41:43
在tcsh中,在双引号字符串中扩展变量名是很棘手的。在你的指挥下:
sed -i "s/^${y}$//g" $x应该正确地展开shell或环境变量$y的值,但是shell将尝试将$/展开为$/的值,正如错误消息所述,$/是一个非法变量名。
你的第二个命令:
sed 's/^'"${y}"'$//g' $x几乎是正确的;它只是缺少了-i参数给sed。
这应该是可行的:sed‘s/^’${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中包含的字符串。这似乎是你想要做的,但我不能肯定。
https://stackoverflow.com/questions/26939888
复制相似问题