【问题标题】:sed unterminated 's' command [duplicate]sed未终止的's'命令[重复]
【发布时间】:2013-06-11 04:44:12
【问题描述】:

我有以下 sed 命令:

Ctimezone="$shortName = exec('date +%Z');\
  $longName = timezone_name_from_abbr($shortName);\
  date_default_timezone_set($longName);"

sed -i 10s@.*@$Ctimezone@ /home/file.php

但是这给了我错误:

sed -e expression #1, char 7: unterminated 's' command

我对 sed 的理解不是很好,所以我确信它很容易解决,但我自己无法解决。

如果您需要更多信息,请告诉我

改为:

sed -i "10s@.*@$Ctimezone@" /home/file.php

但是放入file.php的内容是:

= exec('日期 +%Z'); = timezone_name_from_abbr(); date_default_timezone_set();

不是

$shortName = exec('日期 +%Z'); $longName = timezone_name_from_abbr($shortName); date_default_timezone_set($longName);

【问题讨论】:

  • 需要引用sed表达式:sed -i "10s@.*@$Ctimezone@" /home/file.php
  • 我不确定 @ 符号对 bash 变量有什么作用,但请尝试在实际 sed 命令中将 $Ctimezone 更改为 ${Ctimezone}。
  • @fedorqui 有效,但最终输入到 file.php 中的是 " = exec('date +%Z'); = timezone_name_from_abbr(); date_default_timezone_set();
  • 是的,这就是您的代码所做的。我们不知道你想做什么。
  • @KarolyHorvath 抱歉,Ctimezone 中的所有内容都应视为字符串,因此 $shortName 不是 bash 变量等。

标签: linux bash sed


【解决方案1】:

变量用双引号展开,由于没有设置$shortName,它变成了一个空字符串。

转义美元符号:\$

或者,如果您尝试修改的文件允许exec("date +%Z");,请尝试切换'"。单引号内没有替换。

【讨论】:

    猜你喜欢
    • 2012-07-10
    • 2018-05-29
    • 1970-01-01
    • 2016-07-29
    • 2019-05-04
    • 2012-05-05
    • 2013-11-27
    • 1970-01-01
    • 2015-09-25
    相关资源
    最近更新 更多