Shell Как получить новый путь, заменив подстроку в строке пути - PullRequest
0 голосов
/ 03 июня 2019

У меня есть такой путь:

dirname=../2Reconnaissance-annoted/J39/IMG_2208.json

Я хочу получить новый путь, заменив «.json» на «_json», поэтому я попробовал эту команду:

tr "\.json" "_json" <<<$dirname

Проблема в том, что я получаю:

__/2Reconnaissance-annoted/J39/IMG_2208_json

Вместо

../2Reconnaissance-annoted/J39/IMG_2208_json

Как это исправить, пожалуйста?

1 Ответ

1 голос
/ 03 июня 2019

tr выполняет транслитерацию, то есть заменяет символ на символ, а не строку на строку. Вам нужно заменить.

Большинство оболочек поддерживают замену напрямую:

dirname=${dirname/.json/_json}

(${dirname/%.json/_json} будет заменять только подстроки в конце строки).

Если ваша оболочка не поддерживает ее, вы можете использовать sed:

echo "$dirname" | sed -e 's/\.json$/_json/'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...