linux - sed 替换字符串结尾略有不同的相同模式

标签 linux awk sed

我在整个目录上使用 grep 并使用 sed 来替换字符串。替换中存在一些冲突,因为有两个非常相似且具有相同模式的字符串。唯一的区别是末尾的文件扩展名。

字符串 1

xargs sed -i 's,//website.net/resources/special.js,//newsite.net/location/newspecial.js,g'

字符串 2

xargs sed -i 's,//website.net/resources/file.swf,//newsite.net/location/player.swf,g'

如何指定 .js 接收正确的替换而 .swf 接收正确的替换?

最佳答案

首先,您可以轻松地限制匹配,其次,您需要一个映射来提供旧文件名到新文件名,否则脚本将如何知道“file.swf”被替换为“播放器.swf”。

$ echo '//website.net/resources/special.js' | 
  sed -r 's,(.*/)(.*.js)$,\1new\2,'

//website.net/resources/newspecial.js

第一个匹配组将包含每个字符,直到最后一个 /.,第二个匹配以 .js 结尾的内容,如果有多个元素,您可能需要另一个 anchor 同一条线。请注意,在一个元素的情况下,g 是不必要的。

关于linux - sed 替换字符串结尾略有不同的相同模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38445915/

相关文章:

awk 系统命令,参数中有空格

linux - awk(或 sed 或 grep)来剪切参数、等号和值

linux - 我想在 linux 上删除多行文本

linux - 将一个文件的一部分插入到另一个文件的特定位置

linux - 括号中的 ldd 十六进制数

php - 从 apache 服务器中的 php 访问 shell 可执行文件

linux - 如何添加 shell 脚本中包含的标志?

python - 如何在 python 中读取 ELF 文件的动态部分

Linux 命令或脚本计算文本文件中重复的一堆行?

linux - 打印科学记数法的数字