首页 > 解决方案 > sed 命令不会替换我想要的模式?

问题描述

我有一个index.html文件,其中包含类似的行

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

*.jsIOW ,它引用了很多*.css文件。我想用时间戳值替换所有出现的*.jsand*.css和where *.css?rel=1569974280190463223,所以上面的行看起来像*.js?rel=15699742801904632231569974280190463223

<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行中缺少什么?

标签: shellubuntused

解决方案


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

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

推荐阅读