ファイルの最初の行に特定の文字列が含まれているかどうかを確認するには? [コピー]

ファイルの最初の行に特定の文字列が含まれているかどうかを確認するには? [コピー]

文字列で始まるディレクトリ内のすべてのファイルを見つけて印刷するには、シェルスクリプトを作成する必要があります#include。これで、ファイルに文字列があるかどうかを確認する方法がわかりました。

for f in `ls`; do
    if grep -q 'MyString' $f; then:
        #DO SOMETHING
    fi

しかし、最初の行にどのように適用できますか?最初の行の変数を作成し、それが起動していることを確認しようとしましたが、#includeこれを行う方法がわかりません。コマンドを試しましたが、read変数を読み取れませんでした。

この問題を解決する別の方法を聞きたいです。とにかく、最初の行が#include文字列を含むのではなくで始まることを確認する必要があることに注意してください。これが私が次の問題を見つけた理由です。最初の行が特定のパターンと一致する場合にのみファイルの内容を印刷する方法は? https://stackoverflow.com/questions/5536018/how-to-print-matched-regex-pattern-using-awk 彼らはまったく役に立ちませんでした。

ベストアンサー1

最初の行がsedで始まることを確認するのは簡単です#include(GNUとAT&T)。

sed -n '1{/^#include/p};q'   file

または単純化(およびPOSIX互換):

sed -n '/^#include/p;q'   file

#includeファイルが最初の行に含まれている場合にのみ出力されます。これにより、最初の行だけを読んで確認できるため、非常に高速になります。

したがって、すべてのファイルのシェルループ(sedを使用)は次のようになります。

for file in *
do
    [ "$(sed -n '/^#include/p;q' "$file")" ] && printf '%s\n' "$file"
done

もしpwdにはファイルのみがあります(ディレクトリなし)。

ファイルのすべての行を印刷する必要がある場合は、公開された最初のコード(GNUおよびAT&Tバージョン)と同様のソリューションを使用できます。

sed -n '1{/^#include/!q};p'  file

または(BSD互換POSIXバージョン):

sed -ne '1{/^#include/!q;}' -e p  file

または:

sed -n '1{
           /^#include/!q
         }
         p
       '  file

おすすめ記事