Linux 如何打印包含“文件”的文件名!bin/bash“;在第一行

Linux 如何打印包含“文件”的文件名!bin/bash“;在第一行,linux,bash,find,line,Linux,Bash,Find,Line,我试图打印包含#的文件的名称!bin/bash位于同一文件的第一行(扩展名不重要) 我这样做是为了打印包含以下内容的文件名:#!bin/bash文件中的所有位置,但我只需要在第一行打印包含此链的文件的名称 以下是我所做的: find . -type f -name - grep -L '#!bin/bash' {} \; -printf '%f\n'> file.txt 使用awk进行此操作如何 awk 'NR==1 && ($0 == "#!bin/bash") {pr

我试图打印包含
#的文件的名称!bin/bash
位于同一文件的第一行(扩展名不重要)

我这样做是为了打印包含以下内容的文件名:
#!bin/bash
文件中的所有位置,但我只需要在第一行打印包含此链的文件的名称

以下是我所做的:

find . -type f -name - grep -L '#!bin/bash' {} \; -printf '%f\n'> file.txt

使用
awk
进行此操作如何

awk 'NR==1 && ($0 == "#!bin/bash") {print FILENAME} {exit}' file
这将检查第一行是否包含此内容。如果是,则打印文件名。然后,无论之前发生了什么,它都会退出文件,因为不再需要处理它

使用
find
awk
命令提供文件,只需说
find/your/path-exec awk'.'{}\例如:

find -type f -exec awk 'NR==1 && ($0 == "#!bin/bash") {print FILENAME} {exit}' {} \;

“这就是我所做的…”和。。。发生了什么事
-L
排除匹配的文件,您需要
L
(小写L)。您知道通常
#!bin/bash
是错误的:通常,shebang行中的路径是绝对的,因此应该是
#/bin/bash
@MarcusMüller也许这就是他们试图找到他们的原因?@EtanReisner:这也是我的猜测,但加上查找行中的错误,我认为这样做可能是明智的verify@MarcusMüller是的,我只是恢复了对命令的更改,因为在这一点上,有太多的命令让我无法轻松地“修复”。