Macos 查找并替换为sed和regex

Macos 查找并替换为sed和regex,macos,sed,Macos,Sed,我想使用sed替换资产文件的版本 我的档案里有: <script src="<?php echo assetsUrl ?>/ic-1548620973.js"></script> 试试这个: sed -i 's/(?<=ic-)(.*)(?=.js)/'"$timestamp.js"'/' src/views/partials/foot.view.php sed-i的/(?在macOS上的sed不会像它在Linux上的对应项那样工作,因此您需要调整它

我想使用sed替换资产文件的版本

我的档案里有:

<script src="<?php echo assetsUrl ?>/ic-1548620973.js"></script>
试试这个:

sed -i 's/(?<=ic-)(.*)(?=.js)/'"$timestamp.js"'/' src/views/partials/foot.view.php

sed-i的/(?在
macOS
上的
sed
不会像它在
Linux
上的对应项那样工作,因此您需要调整它

$ timestamp=$( date +%s )
$ sed -Ei '' 's@(ic-)(.*)(\.js)@\1'"$timestamp"'\3@g' src/views/partials/foot.view.php 
您需要包括
-E
选项,因为您使用的是捕获组,而且后面的外观没有必要,更不用说
sed
不是合适的工具。至于
macOS
上的就地编辑,您必须在或中的
-i
选项之后包括两个单引号
'
将其保存到原始文件(就地)的顺序

为了可读性,我将分隔符从
/
更改为
@
。基本上,您有三个捕获组,只包括第一个和第三个捕获组,同时提供中间的
$timestamp
变量

输出

<script src="<?php echo assetsUrl ?>/ic-1548622266.js"></script>

假设您已经安装了
ruby

ruby -i -ne 'puts $_.gsub(/(?<=ic-)\d+(?=\.js)/,Time.now.to_i.to_s)' src/views/partials/foot.view.php

ruby-i-ne'puts$\.gsub(/(?错误消息是相同的:“正则表达式中未终止的替换”sed-i的/(?尝试用\(正斜杠)转义括号)…对于所有括号..出于某种原因,在注释中,我的正斜杠不可见。我尝试了以下方法:sed-i的s/ic-(*).js/\2019/'src/views/partials/foot.view.php sed:1:“src/views/partials/foot…”:正则表达式中的未终止替换是否可以遍历原始正则表达式及其意图。它到底想做什么…如果您不介意我问的话(我不是正则表达式专家,但我正试图帮助您调试)您要替换的原始字符串是什么?我更新了帖子,请看一看。还有一个问题,什么是
$timestamp
?您想在其中放置一个变量值吗?是的,但如果我放置一个字符串,则错误等于。
<script src="<?php echo assetsUrl ?>/ic-1548622266.js"></script>
ruby -i -ne 'puts $_.gsub(/(?<=ic-)\d+(?=\.js)/,Time.now.to_i.to_s)' src/views/partials/foot.view.php