В оболочке Linux я хочу удостовериться, что определенный набор файлов все начинают <?
, наличие, что точная строка и никакие другие символы вначале. Как может я grep или использовать, некоторый другой для выражения "файла начинает"?
Править: Я - wildcarding это, и head
не дает имя файла на той же строке, поэтому когда я grep она, я не вижу filname. Кроме того, "^<?"
кажется, не дает правильные результаты; в основном я получаю это:
$> head -1 * | grep "^<?"
<?
<?
<?
<?
<?
...
Все файлы на самом деле хороши.
Сделайте grep
:
$ head -n 1 * | grep -B1 "^<?"
==> foo <==
<?
--
==> bar <==
<?
--
==> baz <==
<?
Синтаксический анализ имена файлов:
$ head -n 1 * | grep -B1 "^<?" | sed -n 's/^==> \(.*\) <==$/\1/p'
foo
bar
baz
Можно использовать awk для этого:
$ cat test1
<?xxx>
111
222
333
$ cat test2
qqq
aaa
zzz
$ awk '/^<\?/{print "Starting with \"<?\":\t" ARGV[ARGIND]; nextfile} {print "Not starting with \"<?\":\t" ARGV[ARGIND]; nextfile}' *
Starting with "<?": test1
Not starting with "<?": test2
$
За исключением пустых файлов, этот сценарий Perl, кажется, работает:
perl -e 'while (<>) { print "$ARGV\n" unless m/^<\?/; close ARGV; }' *
Я не сразу уверен, как обработать пустые файлы; я испытал бы желание рассматривать их как отдельный особый случай:
find . -type f -size +0 -print0 |
xargs -0 perl -e 'while (<>) { print "$ARGV\n" unless m/^<\?/; close ARGV; }'
Попробуйте это
for i in `find * | grep "php$"`; do echo -n $i " -> "; head -1 $i; done
Это получит список каждого файла, заканчивающегося в PHP, затем цикл через него. повторение имени файла и затем печать первой строки файла. Я просто вставил
даст Вам вывод как:
calendar.php -> <?php
error.php -> <?php
events.php -> <?php
gallery.php ->
index.php -> <?php
splash.php -> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
information.php -> <?php
location.php -> <?php
menu.php -> <?php
res.php -> <?php
blah.php -> <?php
затем можно засунуть нормальный grep в конце для избавлений от того, что Вы хотите видеть и найти просто исключениями
for i in `find * | grep "php$"`; do echo -n $i " -> "; head -1 $i; done | grep -v "<?php"
вывод:
gallery.php ->
splash.php -> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">