如何在Bash中的分隔符上拆分字符串?

时间:2018-03-22 14:46:03

标签: bash pipe pipeline

如何通过管道获取modules/bx/motif

$ find . | grep denied
find: `modules/bx/motif': Permission denied

2 个答案:

答案 0 :(得分:1)

只需使用sed

find . 2>&1 | sed 's/^[^:]*: .\(.*\).: Permission denied/\1/p;d'

或仅使用

正如您的问题代表

string=$'find: `modules/bx/motif\047: Permission denied'
echo $string 
find: `modules/bx/motif': Permission denied

part=${string#*\`} 
echo ${part%\'*}
modules/bx/motif

答案 1 :(得分:0)

您可以重定向STDOUT(您想要出现的错误),以便您可以使用其他工具处理它,然后丢弃STDIN(其中包含您不关心的非错误),然后使用{{1} (或其他任何一种方法)提取你需要的位:

cut

您也可以使用其中一个内置find . 2>&1 >/dev/null | cut -d"‘" -f2 | cut -d"’" -f1 过滤器(例如find}来挑选这些文件,但您必须检查{{1有关详细信息,请参阅手册页。

-perm可能对您的情况有所帮助。