【问题标题】:sed command doesn't replace the pattern that I want?sed 命令不会替换我想要的模式?
【发布时间】:2020-01-31 06:45:55
【问题描述】:

我有一个 index.html 文件,其中包含以下行

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

IOW,它引用了很多 *.js*.css 文件。我想用*.css?rel=1569974280190463223*.js?rel=1569974280190463223替换所有出现的*.js*.css,其中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 行中缺少什么?

【问题讨论】:

    标签: shell ubuntu sed


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。我这样做了,它用我想要的?rel=xxxx 部分在屏幕上滚动文件,但是当我查看文件时,它保持不变?
    • 糟糕,-i 选项丢失了我的答案。我已经更新了我的答案。
    • 啊,是的,我应该明白这一点。现在可以使用了,谢谢@thiono!
    猜你喜欢
    • 2013-10-11
    • 1970-01-01
    • 2017-11-22
    • 2014-11-18
    • 2012-12-29
    • 1970-01-01
    • 2012-05-04
    • 2019-07-18
    • 2016-10-30
    相关资源
    最近更新 更多