为什么我的sed命令在使用变量时失败?
问题描述:
使用bash,我试图插入日期的变量并搜索该日期的日志文件,然后将输出发送到文件。如果我硬编码的日期这样它的工作原理:为什么我的sed命令在使用变量时失败?
sed -n '/Nov 22, 2010/,$p' $file >$log_file
,但如果我做这样的失败:
date="Nov 22, 2010"
sed -n '/$date/,$p' $file >$log_file
我得到的错误是:sed: 1: "/Nov 22, 2010/,": expected context address
感谢您的帮助。
答
在shell脚本中,单引号和双引号之间存在差异。单引号内的变量不扩展(不像那些在双引号),所以你需要:
date="Nov 22, 2010"
sed -n "/$date/,\$p" $file >$log_file
的反斜杠应该从字面上壳应采取的美元符号和具有意义的sed。
+0
是的,但是你必须在p:之前逃避那个,\ $ p – 2010-11-23 02:48:15
http://backreference.org/2009/12/09/using-shell-variables-in-sed/ – birryree 2010-11-23 02:44:58