W powłoce linuksa chcę się upewnić, że cały zestaw plików zaczyna się od tego <?
, że ma dokładnie ten ciąg i nie ma innych znaków na początku. Jak mogę grepować lub użyć innego wyrażenia „plik zaczyna się od”?
Edycja: używam symboli wieloznacznych i head
nie podam nazwy pliku w tym samym wierszu, więc kiedy grep go, nie widzę nazwy pliku. Ponadto "^<?"
nie wydaje się dawać właściwych rezultatów; w zasadzie otrzymuję to:
$> head -1 * | grep "^<?"
<?
<?
<?
<?
<?
...
Wszystkie pliki są w rzeczywistości dobre.
command-line
bash
grep
użytkownik13743
źródło
źródło
find
find
może również zwrócić tylko zwykłe pliki bezpośrednio do uruchomienia potoku.read
zamiasthead
:for file in *; do [ -f "$file" ] || continue; read < "$file"; [[ "$REPLY" =~ ^\<\? ]] || echo "$file"; done
Wykonaj
grep
:Parsuj nazwy plików:
źródło
Możesz użyć do tego awk:
źródło
Z wyjątkiem pustych plików ten skrypt Perla wydaje się działać:
Nie jestem od razu pewien, jak obsługiwać puste pliki; Skusiłbym się potraktować je jako osobny przypadek szczególny:
źródło
Spróbuj tego
Spowoduje to wyświetlenie listy każdego pliku kończącego się na PHP, a następnie przechodzenie przez niego. echo nazwy pliku, a następnie wydrukowanie pierwszego wiersza pliku. Właśnie włożyłem
da ci dane wyjściowe takie jak:
możesz na końcu przykleić normalny grep, aby pozbyć się tego, co chcesz zobaczyć i znaleźć tylko wyjątki
wynik:
źródło
for x in *.php;do echo $x \"
głowa -n1 $ x\";done
Bash 4.0
źródło
powinien zrobić to, o co prosisz.
źródło
cat
użycie,head -1 file.txt | grep "^<?"
wystarczy.command
potraktuje plik jako argument. Może nie jest to absolutnie konieczne, ale nieto:
daje ci coś takiego:
każdy plik niezawierający wzorca będzie „oznaczony” „1”. możesz z tym grać, dopóki nie spełni twoich potrzeb.
źródło
head -1 "$i" | grep '^<?' || echo "$i"
która wypisze nazwę pliku tylko wtedy, gdy jest problematyczna.Pozwól mi spróbować
nikt nie powiedział, że wak był niedostępny :-)
źródło