如何从路径中提取文件名;我有一个文件列表。我正在使用csh shell,并安装了awk,sed,perl。
/ dfgfd / dfgdfg /文件名
应该给我
文件名
我尝试过basename:
find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h'
| xargs grep -l pattern | xargs basename
它给了我以下错误:
basename:参数太少了 请尝试使用`basename --help'获取更多信息。
THX
答案 0 :(得分:9)
标准计划basename
可以满足您的需求:
$ basename /dfgfd/dfgdfg/filename
filename
答案 1 :(得分:1)
这种解决方法对我有用。你说你有perl所以这应该运行。它将所有非空格文本替换为最后一个/没有任何内容(有效地删除它)。
find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h'
| xargs grep -l pattern | perl -pi -e "s/\S+\///g"
答案 2 :(得分:0)
好的,我找到了一个使用AWK的好解决方案:
find $PROJECT_DIR -name '*.c' -o -name '*.cc' -o -name '*.h'
| xargs grep -l PATTERN | awk -F "/" '{print $NF}'
答案 3 :(得分:0)
find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h' | xargs grep -l pattern
| xargs -n1 basename
试试这个!!
作为basename的respet单路径参数作为参数,因此我们强制xargs逐个拆分它。