首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TCSH Shell脚本:在文件中使用sed替换变量

TCSH Shell脚本:在文件中使用sed替换变量
EN

Stack Overflow用户
提问于 2014-11-14 22:26:09
回答 1查看 7.1K关注 0票数 1

在我的tcsh脚本中,我有一个

代码语言:javascript
复制
sed -i "s/^${y}$//g" $x

我怎么才能让这个起作用?要么我没有得到任何更改,要么出现了一些错误,比如非法变量名或变量名必须包含字母数字字符。尝试了"“的不同组合。'‘在联邦政府内部。示例

代码语言:javascript
复制
sed 's/^'"${y}"'$//g' $x
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-14 22:41:43

在tcsh中,在双引号字符串中扩展变量名是很棘手的。在你的指挥下:

代码语言:javascript
复制
sed -i "s/^${y}$//g" $x

应该正确地展开shell或环境变量$y的值,但是shell将尝试将$/展开为$/的值,正如错误消息所述,$/是一个非法变量名。

你的第二个命令:

代码语言:javascript
复制
sed 's/^'"${y}"'$//g' $x

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

这应该是可行的:sed‘s/^’${y}“$//g‘$x

本例中不需要围绕{}y,因此您可以编写:

代码语言:javascript
复制
sed 's/^'"${y}"'$//g' $x

或者你可以这样做:

代码语言:javascript
复制
sed -i "s/^$y"'$'"//g" $x

最后一个版本从双引号切换到单引号,然后返回到$字符。这是一个强调的问题,您是只想在$中使用单引号而不想展开,还是只在$y周围使用双引号,而您确实希望展开它。

更简单的是,您可以在$字符前面加上\ (我认为这可能是tcsh特有的;原来的csh可能无法这样做),从而在一个双引号字符串中转义它。因此,我认为这是首选的方法-假设您有tcsh而不是旧风格的csh:

代码语言:javascript
复制
sed -i "s/^$y\$//g" $x

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26939888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档