文字列で始まるディレクトリ内のすべてのファイルを見つけて印刷するには、シェルスクリプトを作成する必要があります#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