1行目でパターン検索後のファイル名のみ出力(grep、head利用)

1行目でパターン検索後のファイル名のみ出力(grep、head利用)

だから私は初心者であり、来週プロジェクトの締め切りがあります。#!/bin/bash最初の行に含まれるファイルのファイル名のみを印刷する必要があります。これまで私はこれを試しました

head -n 1 $filename | grep -l "pattern"

ただし、代わりに実行するとファイル名が表示されます。

(standard input)

前述したように、私は初心者であり、これまでは簡単なコマンドに慣れています。だから私がどこを台無しにしているのか、awk

for fis in  find -perm -a+x -name "*.sh" -type f
do
head -n 1 $fis | grep -l "#!/bin/bash"
done

ベストアンサー1

GNUでは、入力がstdinから来る場合、grepオプションを使用してラベル/ファイル名を設定できます。--label

-execコマンドの置き換えで外部ループを使用する代わりに、この操作を使用してファイル名を繰り返し、コマンドを実行する小さなスクリプトを起動できます。

find -perm -a+x -name "*.sh" -type f -exec sh -c '
  for fis; do
    head -n1 "$fis" | grep --label="$fis" -Fl "#!/bin/bash"
  done
' sh {} +

固定文字列を探しているので、その-Fオプションを追加しました。grep

おすすめ記事