提取文件名从在csh shell路径 - 从文件
问题描述:
如何从路径中提取文件名列表;我有一个文件列表。我使用的是csh shell,并安装了awk,sed和perl。提取文件名从在csh shell路径 - 从文件
/dfgfd/dfgdfg /文件名
应该给我
名
我试过基本名称:
find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h'
| xargs grep -l pattern | xargs basename
,它给了我下面的错误:
基名:参数太少 尝试`basename - 帮助'获取更多信息。
THX
答
标准程序basename
你想要做什么:
$ basename /dfgfd/dfgdfg/filename
filename
答
这种解决办法的工作对我来说。你说你有perl,所以这应该运行。它将所有非空格文本替换为最后/不加任何内容(有效地删除它)。
find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h'
| xargs grep -l pattern | perl -pi -e "s/\S+\///g"
答
好吧,我发现使用AWK一个很好的解决方案:
find $PROJECT_DIR -name '*.c' -o -name '*.cc' -o -name '*.h'
| xargs grep -l PATTERN | awk -F "/" '{print $NF}'
答
find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h' | xargs grep -l pattern
| xargs -n1 basename
试试这个!
为基名accepet单一路径参数作为参数,所以我们强迫xargs的拆分也一个接一个。
我的问题是略有不同,基本名称将无法正常工作。检查编辑的问题。 – vehomzzz 2009-09-30 15:01:37
'basename'一次只能用于一个文件名。用'xargs -n1 basename'替换最后一部分。 – Thomas 2009-09-30 15:08:53
也可以尝试'-r',避免运行不带参数的一个'basename'如果没有匹配。 – ephemient 2009-09-30 15:42:27