Bash / sed: добавить расширение в конец URL - PullRequest
2 голосов
/ 18 октября 2019

У меня есть много файлов с такой строкой, как:

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 Ответ

2 голосов
/ 18 октября 2019

Вы можете использовать

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')
...