【问题标题】:using date variable inside sed command在 sed 命令中使用日期变量
【发布时间】:2014-01-02 19:28:36
【问题描述】:

我将日期存储在一个变量中,并在 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

我尝试在日期前后使用不同的引号。如何让它运行?

【问题讨论】:

    标签: shell unix sed


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!!有效。我不知道我可以使用任何其他分隔符:)..thnks 很多
    【解决方案2】:

    不是直接查询而是替换

    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
    

    【讨论】:

      猜你喜欢
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 2017-07-10
      • 2013-10-09
      相关资源
      最近更新 更多