我想搜索目录结构来计算我加载各种R包的次数。源包含在.org和.R文件中。我愿意假设“库(”是我关心的任何一行上的第一个非空白条目,我愿意假设每行最多只有一个这样的电话。
find . -regex ".*/.*\.org" -print
获取.org文件列表,
find . -regex ".*\.\(org\|R\)$" -print
获取.org和.R文件列表(感谢https://unix.stackexchange.com/questions/15308/how-to-use-find-command-to-search-for-multiple-extensions)。
鉴于特定文件,
grep -h "library(" file | sed 's/library(//' | sed 's/)//'
获取包名称。我想将它们连接在一起,然后可能将输出重定向到一个文件,我可以使用它来计算频率。
看似简单的
find . -regex ".*/.*\.org" -print | xargs -0 grep -h "library(" | sed 's/library(//' | sed 's/)//'
不起作用;我得到了
find . -regex ".*/.*\.org" -print | xargs -0 grep -h "library(" | sed 's/library(//' | sed 's/)//'
Usage: /usr/bin/grep [OPTION]... PATTERN [FILE]...
Try '/usr/bin/grep --help' for more information.
我不知道下一步该做什么。
我也试过
find . -regex ".*/.*\.org" -exec grep -h "library(" "{}" "\;"
得到了
find . -regex ".*/.*\.org" -exec grep -h "library(" "{}" "\;"
find: missing argument to `-exec'
看起来很简单。我错过了什么?
更新:在上面的xargs中添加-t显示第一个命令:
grep -h library ./dirname/filename.org
后面可能是所有匹配文件的列表,其中包含相对于PWD的路径。实际上,如果我只搜索.org文件,那就有效;如果我也添加.R文件,我会得到“xargs:argument line too”。我认为这意味着xargs将整个文件列表作为参数传递给一次grep调用。
答案 0 :(得分:0)
find ... -print | xargs
好
find ... -print0 | xargs -0
好
find ... -print0 | xargs
损坏
find ... -print | xargs -0
损坏了(用过的东西)
另外,请不要:
grep -h "library(" | sed 's/library(//' | sed 's/)//'
速度更快时:
grep -h "library(" | sed -e 's/library(//' -e 's/)//'
这更快,更有趣:
grep -h "library(" | grep -o '(.*)' | tr -d ' ()'