根据正则表达式删除$ PATH条目

her*_*ung 0 regex shell perl replace

我试图删除$ PATH中的条目,如果该条目包含给定的字符串foo.例如PATH=/home/me/bin:/home/foo/bin:/usr/foo/bin:/bin会成为PATH=/home/me/bin:/bin.我现在有

echo $PATH | perl -pe 's/:(.*?)foo(.*?):/:/g'
Run Code Online (Sandbox Code Playgroud)

但这似乎删除了太多的条目,即使我正在尝试使用非贪婪的匹配.我究竟做错了什么?

小智 5

我会拆分字符串,选择有效的部分,然后再次加入字符串:

perl -e 'print join ":", grep !/foo/, split ":", $ENV{PATH}'
Run Code Online (Sandbox Code Playgroud)