shell - sed 命令不会替换我想要的模式?
问题描述
我有一个index.html
文件,其中包含类似的行
<script src="js/config.js"></script>
<link href="css/colorpicker.min.css" rel="stylesheet" />
*.js
IOW ,它引用了很多*.css
文件。我想用时间戳值替换所有出现的*.js
and*.css
和where *.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
行中缺少什么?
解决方案
您$timestamp
在单引号内引用 shell 变量。请尝试:
sed -i -e 's|\.css"|\.css?rel='"$timestamp"'"|g' -e 's|\.js"|\.js?rel='"$timestamp"'"|g' index.html