我需要输出包含字符串“XYZ”的文件名(例如A001.txt
)。 我尝试这样做:
grep -H -R "XYZ" ~/directory/*.txt | cut -d':' -f1
如何仅打印包含特定字符串的文件的文件名部分?
它将输出的整个路径(例如~/directory/A001.txt
)。我怎样才能让它只输出文件名(例如A001.txt
)?
我需要输出包含字符串“XYZ”的文件名(例如A001.txt
)。 我尝试这样做:
grep -H -R "XYZ" ~/directory/*.txt | cut -d':' -f1
如何仅打印包含特定字符串的文件的文件名部分?
它将输出的整个路径(例如~/directory/A001.txt
)。我怎样才能让它只输出文件名(例如A001.txt
)?
grep -lr term dir/to/search/ | awk -F'/' '{print $NF}'
应该这样做。
-l
只是列出了文件名,包括他们的目录。
-r
递归通过目录树和指定的目录中的所有文件。
这一切又通过管道输送到awk
,这是告知使用/
作为分隔符(而不是在文件名不允许的,所以不脆,因为它可以),并打印最后一个字段(NF
是场算的,所以$NF
是最后一个字段)
grep -Rl "content" | xargs -d '\n' basename -a
这应该是诀窍,只打印没有路径的文件名。
基名打印文件名NAME去掉任何领先的目录组件 。
为什么啊,为什么GNU的家伙给grep的一个选项,以递归查找文件时,有一个非常好的工具,设计的工作,具有极其明显的名称。叹息...
find . -type f -exec awk '/XYZ/{print gensub(/.*\//,"",1,FILENAME); nextfile}' {} +
以上使用GNU awk,我假设你已经有了,因为你打算使用GNU grep。
如果你有用于'-d'\ n''的GNU utils,那么你应该一路走下去并使用grep -Z和xargs -0。 –