[英]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.