Достаточно просто, если известно, что само имя файла никогда не содержит косых черт или вопросительных знаков:
sed --in-place 's_http.*/img/\(.*\)?q=[0-9][0-9]*_\1_' inputfile
Если вам действительно нужны сайт и номера проблем, вы можете собрать свою команду sed
, а затем реализовать ее как переменную:
sedcmd='s_http.*'$num1'.*'$num2'.*/img/\(.*\)?q=[0-9][0-9]*_\1_'
sed --in-place "$sedcmd" inputfile
В любой оболочке, подобной sh -, $0
— это путь к исполняемому скрипту. Это задокументировано для bash в специальных параметрах . Это может быть относительный путь, и в этом случае он относится к текущему каталогу при запуске оболочки.
Обратите внимание, что $0
не изменяется, когда скрипт выполняет другой скрипт с .
или source
. Более близким аналогом Python __file__
, указывающим, какой файл содержит исполняемый в данный момент код, является $BASH_SOURCE
. Руководство не очень понятно по этой теме, но $BASH_SOURCE
— это имя файла, содержащего текущую исполняемую строку, даже для кода, который не находится в функции. Как и $0
, $BASH_SOURCE
может быть относительным путем :, это то, что было передано встроенной команде .
, и не изменится, если оболочка выполнит последующие команды cd
.
Большинство ответов либо не обрабатывают файлы, связанные символическими ссылками через относительный путь, либо не являются одним -лайнером, либо не обрабатывают BSD (Mac ). Решение, которое делает все три,:
HERE=$(cd "$(dirname "$BASH_SOURCE")"; cd -P "$(dirname "$(readlink "$BASH_SOURCE" || echo.)")"; pwd)
Во-первых, перейдите cd к представлению bash о каталоге скрипта. Затем прочтите ссылку на файл, чтобы увидеть, является ли он символической ссылкой (относительной или иной ), и если да, перейдите в этот каталог. Если нет, перейдите в текущий каталог (, чтобы сохранить все в один -лайнер ). Затем повторите текущий каталог через pwd
.
Вы можете добавить --
к аргументам cd и readlink, чтобы избежать проблем с каталогами, названными как опции, но в большинстве случаев я не беспокоюсь.
Вы можете увидеть полное объяснение с иллюстрациями здесь (это мой сайт):
https://www.binaryphile.com/bash/2020/01/12/determining-the-location-of-your-script-in-bash.html