sed命令不会替换我想要的模式吗?

时间:2019-10-02 00:39:11

标签: shell ubuntu sed

我有一个index.html文件,其内容类似于

<script src="js/config.js"></script>
<link href="css/colorpicker.min.css" rel="stylesheet" />

IOW,它引用了许多*.js*.css文件。我想用*.js*.css替换所有出现的*.css?rel=1569974280190463223*.js?rel=1569974280190463223,其中1569974280190463223是一个时间戳值,所以上面的行看起来像

<script src="js/config.js?rel=1569974280190463223"></script>
<link href="css/colorpicker.min.css?rel=1569974280190463223" rel="stylesheet" />

我有一个执行此操作的shell脚本

timestamp="$(($(date +%s%N)-T))"
sed -i -e 's|\.css"|\.css?rel=$timestamp"|g' -e 's|\.js"|\.js?rel=$timestamp"|g' index.html

但是index.html文件最终看起来像

<script src="js/config.js?rel=$timestamp"></script>
<link href="css/colorpicker.min.css?rel=$timestamp" rel="stylesheet" />

我在sed行中缺少什么?

1 个答案:

答案 0 :(得分:1)

您在单引号内引用了shell变量$timestamp。 请尝试:

sed -i -e 's|\.css"|\.css?rel='"$timestamp"'"|g' -e 's|\.js"|\.js?rel='"$timestamp"'"|g' index.html