在sed命令中使用日期变量

时间:2014-01-02 19:28:36

标签: shell unix sed

我将日期存储在变量中,并在sed中使用它,如下所示。

DateTime=`date "+%m/%d/%Y"`

Plc_hldr1=`head -$i place_holder.txt | tail -1 | awk -F ' ' '{ print $1 }'`
Plc_hldr2=`head -$i place_holder.txt | tail -1 | awk -F ' ' '{ print $2 }'`

sed "s/$Plc_hldr1/$DateTime/;s/$Plc_hldr2/$Total/" html_format.htm >> /u/raskar/test/html_final.htm

运行sed命令时,我收到以下错误。

sed: 0602-404 Function s/%%DDMS1RT%%/01/02/2014/;s/%%DDMS1C%%/1235/ cannot be parsed.

我认为这种情况正在发生,因为日期包含以下输出,其中包括斜杠'/'

01/02/2014

我在日期周围尝试了不同的引号。我如何让它运行?

2 个答案:

答案 0 :(得分:4)

将分隔符更改为不会出现在模式中的其他内容,例如:

sed "s?$Plc_hldr1?$DateTime?;s?$Plc_hldr2?$Total?"

答案 1 :(得分:0)

不是直接断言,而是替换

Plc_hldr1=`head -$i place_holder.txt | tail -1 | awk -F ' ' '{ print $1 }'`
Plc_hldr2=`head -$i place_holder.txt | tail -1 | awk -F ' ' '{ print $2 }'`

通过

Plc_hldr1=`sed -n "$i {s/ .*//p;q}"`
Plc_hldr2=`sed -n "$i {s/[^ ]\{1,\} \{1,\}\([^ ]\{1,\}\) .*/\1/p;q}"`

和aix / ksh

sed -n "$i {s/\([^ ]\{1,\} \{1,\}[^ ]\{1,\}\) .*/\1/p;q}" | read Plc_hldr1 Plc_hldr2