繁体   English   中英

使用sed将字符串替换为特殊字符

[英]replace string with special characters using sed

我在文件中包含以下字符串:“ dd / mmm / YYYY:HH:MM:SS -0500”,并希望将其替换为实际日期,即“ 17 / Mar / 2016:18:14:40 -0500” ”

我尝试使用sed,但以下内容似乎无效

dateTemplate="dd/mmm/YYYY:HH:MM:SS -0500"
actualDate="17/Mar/2016:18:14:40 -0500"
sed -i "s#'$dateTemplate'#'$actualDate'#g" tmp.txt

任何帮助,将不胜感激。

尝试从sed程序中删除单引号( ' ):

dateTemplate="dd/mmm/YYYY:HH:MM:SS -0500"
actualDate="17/Mar/2016:18:14:40 -0500"
sed -i "s#$dateTemplate#$actualDate#g" tmp.txt

经过GNU sed 4.2.1版测试

之前:

1. pre dd/mmm/YYYY:HH:MM:SS -0500 post
2. pre dd/mmm/YYYY:HH:MM:SS -0500 post

后:

1. pre 17/Mar/2016:18:14:40 -0500 post
2. pre 17/Mar/2016:18:14:40 -0500 post

编辑:我注意到您正在使用一个不同的定界符。 我可以肯定迈克尔·杰罗斯(Michael Jaros)的答案是更准确的。

您将需要转义斜线:

dateTemplate="dd/mmm/YYYY:HH:MM:SS -0500"
actualDate="17\/Mar\/2016:18:14:40 -0500"
sed -i "s/$dateTemplate/$actualDate/g" tmp.txt

我测试了工作原理。 让我知道是否可以!

我会自动执行该过程:

dateTemplate="dd/mmm/YYYY:HH:MM:SS -0500"

actualDateTemplate="+$(
    sed '
        s/\<dd\>/%d/g
        s/\<mmm\>/%b/g
        s/\<YYYY\>/%Y/g
        s/\<HH\>/%H/g
        s/\<MM\>/%M/g
        s/\<SS\>/%S/g
        # add more translations here if desired
    ' <<<"$dateTemplate"
)"

actualDate=$(date "$actualDateTemplate")

echo "foo $dateTemplate bar" | sed "s#$dateTemplate#$actualDate#g"
foo 17/Mar/2016:20:22:34 -0500 bar

无论使用什么字符,始终存在dateTemplate变量包含用作s///分隔符的字符的危险。 此过程可以通过外壳程序中的字符串操作来完成,但这很繁琐。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM