sed错误:未知选项's'
我有一个bash脚本中的sed命令,用一个变量的值替换文件中的第10行。 确定以停止confustion(这是我的错,这里是完整的脚本:sed错误:未知选项's'
#!/bin/bash
#Sync timezone between system and php
##get current timezone of system
line=$(head -n 1 /etc/sysconfig/clock)
timezone=${line:6}
##Set up php date string
time="date_default_timezone_set('${timezone%?}');"
sed -i 10s|.*|$time| test.php
左右的时间将有一个值,如:
date_default_timezone_set(“欧洲/伦敦)
现在给这些错误:
> test.php: Permission denied
> date_default_timezone_set('Europe/London);: Not such file or direcotry
> .: .:: is a directory
> sed: -e expression #1. char 3: unterminated 's' command
任何帮助将是巨大的,如果你需要任何更多的信息让我知道
!
由于timezone
包含/
字符,你需要做一些特别的东西:
sed -i [email protected]*@[email protected] test.php
您可以使用不会出现在你的源和目标字符串的任何字符。这里我选择了@
。
谢谢你,虽然上述所有方法都可以工作,但这是我与 – 2013-05-04 11:41:46
time='date_default_timezone_set\("\$timezone"\);'
请注意,我也颠倒了引号的样式。这是必要的,因为在使用单引号时,PHP不会替代变量。
你也可以用引号括起来$时间,但如果$timezone
是一个实际的变量,你仍然需要双引号:
time='date_default_timezone_set("$timezone");'
sed -i 10s/.*/"$time"/ test.php
基于你更新的问题,我的理解是,你实际上是使用一个字符串常量代替$timezone
,所以这可能不适用。在这种情况下,最干净的选择就是要做到:
time='date_default_timezone_set("America/New_York");'
sed -i 10s/.*/"${time/\//\\/}"/ test.php
注意,这需要庆典是在“打击”模式,而不是“sh”的模式。确保你有#!/bin/bash
在任何脚本的顶部。
hm。我得到了奇怪的错误:'sed:1:“test.php”:undefined label'est.php'' 通过运行上述代码 – kobame 2013-05-03 19:43:04
@kobame哪一组代码?所有这一切都适合我。 – Zenexer 2013-05-03 19:48:45
最后两行,用'sed -i 10s /.*/“$ {time/\ // \\ /}”/ test.php' - 我把这两个文件放入一个myscript文件中,并作为'bash myscript' - 我的test.php只包含20行数字 – kobame 2013-05-03 20:07:23
为了得到时区是不幸的是没有可移植的,但通常在/ etc /本地时间是一个符号链接到你的时区,所以您可以:
tz=$(readlink /etc/localtime | sed 's:\(.*\)/\([^/]*\)/\([^/]*\)$:\2/\3:')
echo ==$tz==
你会得到你像==Europe/London==
。现在,您可以构建您的字符串
time="date_default_timezone_set('$tz');"
,并在sed中使用它 - 但不使用/
作为分隔符(因为包括它混淆你的sed的时候刺痛)
sed -i "10s:.*:$time:" test.php
,它将取代整条生产线'$ time'。你不是只想替换部分行,比如'$ timezone'? – Zenexer 2013-05-03 19:13:28
是的另一种选择是将行保留在test.php中,并只更新$ timezone的部分。我不确定如何做到这一点,所以只是做了整个线路,但如果你能做到这一点,那将是很大的 – 2013-05-03 19:14:30
这将用'$ time'替代整个线路。你只需要用'$ time'在你的PHP文件中有一行。通常,这是无效的PHP。 - 哦,等等,我明白了...... – Zenexer 2013-05-03 19:15:31