我需要打印出包含字符串“XYZ”的文件名(例如A001.txt
)。
我试过这个:
grep -H -R "XYZ" ~/directory/*.txt | cut -d':' -f1
它将输出整个路径(例如~/directory/A001.txt
)。我怎样才能使它只输出文件名(例如A001.txt
)?
答案 0 :(得分:3)
为什么哦,为什么GNU的人会给grep一个选项来递归查找文件,因为这是一个非常好的工具,专为这项工作设计并且名字非常明显。叹息...
find . -type f -exec awk '/XYZ/{print gensub(/.*\//,"",1,FILENAME); nextfile}' {} +
以上使用GNU awk,我假设你已经计划使用GNU grep了。
答案 1 :(得分:1)
grep -lr term dir/to/search/ | awk -F'/' '{print $NF}'
应该可以解决问题。
-l
只列出文件名,包括其目录。
-r
递归遍历目录树和指定目录中的所有文件。
这一切都被传递到awk
,被告知使用/
作为分隔符(文件名中不允许,因此不会像它那样脆)并打印最后一个字段( NF
是字段数,因此$NF
是最后一个字段)
答案 2 :(得分:1)
grep -Rl "content" | xargs -d '\n' basename -a
这应该可以解决问题,只打印没有路径的文件名。
basename 使用任何前导目录组件打印文件名NAME 除去。