3

如何从路径中提取文件名;我有一个文件列表。我正在使用 csh shell,并安装了 awk、sed、perl。

/dfgfd/dfgdfg/文件名

应该给我

文件名

我尝试了基本名称:

    find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h'
 | xargs grep -l pattern | xargs basename

它给了我以下错误:

基本名称:参数太少 尝试使用 `basename --help' 获取更多信息。

谢谢

4

4 回答 4

11

标准程序basename可以满足您的要求:

$ basename /dfgfd/dfgdfg/filename
filename
于 2009-09-30T14:58:36.460 回答
1

这种解决方法对我有用。你说你有 perl 所以这应该运行。它将所有非空格文本替换为最后一个 / 没有任何内容(有效地删除它)。

find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h'
 | xargs grep -l pattern | perl -pi -e "s/\S+\///g"
于 2009-09-30T15:13:49.760 回答
0

好的,我使用 AWK 找到了一个不错的解决方案:

    find  $PROJECT_DIR  -name '*.c' -o -name '*.cc' -o -name '*.h' 
| xargs grep -l PATTERN | awk -F "/" '{print $NF}'
于 2009-09-30T17:23:19.667 回答
0
find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h' | xargs grep -l pattern 
| xargs -n1 basename

试试这个 !!

作为 basename 接受单个路径参数作为参数,因此我们强制 xargs 将其一一拆分。

于 2012-04-11T11:38:04.143 回答