Bash / sed:在URL末尾添加扩展名

时间:2019-10-18 08:44:16

标签: bash sed

我有很多文件的行,例如:

INPUTS+=('http://domain.ext/XXX/ZZZ/12345')

我想修改为:

INPUTS+=('http://domain.ext/XXX/ZZZ/12345.ts') // add the ".ts" before parentheses

这是我到目前为止使用的sed命令,但无法正常工作:

find */*.sh -type f -print0 | xargs -0 sed -i "s|\([0-9]*\)\(\x27\)|\1.ts\2|g"

我将如何进行这项工作?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用

sed -i "s/\([0-9]\{1,\}\)\(')\)$/\1.ts\2/g"

POSIX BRE详细信息

  • \([0-9]\{1,\}\)-第1组:一个或多个ASCII数字
  • \(')\)-第2组:')子字符串
  • $-字符串的结尾。

替换内容是第1组.ts和第2组内容。

如果您不必确保在'之前有1个数字,并且可以在最终使用.ts之前添加')

sed -i "s/')$|.ts&/"

在这里,字符串末尾的')被匹配并替换为.ts和匹配值本身(&)。

请参见online sed demo

s="INPUTS+=('http://domain.ext/XXX/ZZZ/12345')"
sed "s/')$/.ts&/g" <<< "$s"
# => INPUTS+=('http://domain.ext/XXX/ZZZ/12345.ts')
sed "s/\([0-9]\{1,\}\)\(')\)$/\1.ts\2/g" <<< "$s"
# => INPUTS+=('http://domain.ext/XXX/ZZZ/12345.ts')