我有很多文件的行,例如:
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"
我将如何进行这项工作?
谢谢!
答案 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')