2016-06-08 3 views
2

Предоставлено список путей, разделенных одним пробелом:Удалить Префикс пути разделенных пробелами путей

/home/me/src/test /home/me/src/vendor/a /home/me/src/vendor/b 

Я хочу, чтобы удалить префикс /home/me/src/ так, что результат:

test vendor/a vendor/b

Для одного пути я бы сделал: ${PATH#/home/me/src/}, но как применить его к этой серии?

ответ

4

Вы можете использовать // заменить все вхождения подстроки. Замените его нулевой строкой, чтобы удалить их.

$ path="/home/me/src/test /home/me/src/vendor/a /home/me/src/vendor/b" 
$ echo ${path//\/home\/me\/src\/} 
test vendor/a vendor/b 

Ссылка: ${parameter/pattern/string} in Bash reference manual

2

Использование shell parameter expansion не кажется, что решение для этого, так как это было бы удалить все до/от заданной точки полезно, так как nu11p01n73R's answer показывает.

Для ясности, я хотел бы использовать sed с синтаксисом sed 's#pattern#replacement#g':

$ str="/home/me/src/test /home/me/src/vendor/a /home/me/src/vendor/b" 
$ sed 's#/home/me/src/##g' <<< "$str" 
test vendor/a vendor/b 
0

Как всегда в Grep решение с моей стороны:

echo 'your string' | grep -Po '^/([^ /]*/)+\K.+' 

Пожалуйста, обратите внимание, что выше регулярное выражение сделать это для любой строки, как /x/y/z/test ... Но если вы заинтересованы только в замене /home/me/src/, попробуйте выполнить следующие действия:

echo 'your string' | grep -Po '^/home/me/src/\K.+' --color 
Смежные вопросы