从 csh shell 中的路径中提取文件名 -- 从文件列表中

发布于 2024-08-06 21:13:03 字数 352 浏览 13 评论 0原文

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

/dfgfd/dfgdfg/filename

应该给我

文件名

我尝试了 basename: ,

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

它给了我以下错误:

basename: 参数太少 尝试“basename --help”以获取更多信息。

谢谢

How to extract filename from the path; i have a list of files. I'm using csh shell, and have awk, sed, perl installed.

/dfgfd/dfgdfg/filename

should give me

filename

I tried basename:

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

and it gave me the following error:

basename: too few arguments
Try `basename --help' for more information.

thx

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

不一样的天空 2024-08-13 21:13:03

标准程序 basename 执行您想要的操作:

$ basename /dfgfd/dfgdfg/filename
filename

The standard program basename does what you want:

$ basename /dfgfd/dfgdfg/filename
filename
娜些时光,永不杰束 2024-08-13 21:13:03

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

find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h'
 | xargs grep -l pattern | perl -pi -e "s/\S+\///g"

This kind of workaround worked for me. You said you had perl so this should run. It replaces all nonspace text up to the last / with nothing (effectively deleting it).

find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h'
 | xargs grep -l pattern | perl -pi -e "s/\S+\///g"
夏九 2024-08-13 21:13:03

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

    find  $PROJECT_DIR  -name '*.c' -o -name '*.cc' -o -name '*.h' 
| xargs grep -l PATTERN | awk -F "/" '{print $NF}'

Ok I found a nice solution using AWK:

    find  $PROJECT_DIR  -name '*.c' -o -name '*.cc' -o -name '*.h' 
| xargs grep -l PATTERN | awk -F "/" '{print $NF}'
不知所踪 2024-08-13 21:13:03
find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h' | xargs grep -l pattern 
| xargs -n1 basename

试试这个!

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

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

try this !!

as basename accepet single path parameter as argument, so we force xargs to split it one by one.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文