Удалить часть строки с помощью bash - PullRequest
0 голосов
/ 19 марта 2019

У меня есть путь /home/bamboo/bamboo-agent-home/xml-data/build-dir/NG-VOSGQL239-JOB1, и я хотел бы получить только /home/bamboo/bamboo-agent-home/xml-data/build-dir/ Как я могу удалить последнюю часть пути, если она может быть разной длины с помощью Bash?

Ответы [ 3 ]

3 голосов
/ 19 марта 2019

Вот некоторые распространенные способы сделать это:

$ str=/home/bamboo/bamboo-agent-home/xml-data/build-dir/NG-VOSGQL239-JOB1
$ echo "${str%/*}"                                # fast, but wrong if str has no "/"s in it
/home/bamboo/bamboo-agent-home/xml-data/build-dir
$ dirname "$str"                                  # slow, but returns "." for bare names
/home/bamboo/bamboo-agent-home/xml-data/build-dir
$ echo "$str" | sed 's@/[^/]*$@@'                 # more general, but slow *and* wrong with no "/"s
/home/bamboo/bamboo-agent-home/xml-data/build-dir

Обратите внимание, что в приведенном выше слове мы используем «неправильно», чтобы указать на неожиданное поведение в случае манипулирования путем.(Например, мы определяем вывод dirname как правильное поведение.)

2 голосов
/ 19 марта 2019

Использование регулярного выражения bash =~:

$ var=/home/bamboo/bamboo-agent-home/xml-data/build-dir/NG-VOSGQL239-JOB
$ [[ $var =~ .*/ ]] && echo "${BASH_REMATCH[0]}"
/home/bamboo/bamboo-agent-home/xml-data/build-dir/
2 голосов
/ 19 марта 2019

Использование dirname

dirname /home/bamboo/bamboo-agent-home/xml-data/build-dir/NG-VOSGQL239-JOB
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...