Em um shell linux, quero ter certeza de que um certo conjunto de arquivos comece <?
, com essa sequência exata e sem outros caracteres no início. Como posso grep ou usar outra para expressar "o arquivo começa com"?
Edit: Estou curingando isso e head
não dá um nome de arquivo na mesma linha; portanto, quando o grep, não vejo o nome do arquivo. Além disso, "^<?"
parece não dar os resultados certos; basicamente eu estou entendendo isso:
$> head -1 * | grep "^<?"
<?
<?
<?
<?
<?
...
Todos os arquivos são realmente bons.
command-line
bash
grep
user13743
fonte
fonte
find
find
também pode retornar apenas arquivos simples diretamente para iniciar o pipe.read
, em vez dehead
, também:for file in *; do [ -f "$file" ] || continue; read < "$file"; [[ "$REPLY" =~ ^\<\? ]] || echo "$file"; done
Faça o
grep
:Analise os nomes dos arquivos:
fonte
Você pode usar o awk para isso:
fonte
Exceto para arquivos vazios, este script Perl parece funcionar:
Não sei imediatamente como lidar com arquivos vazios; Eu ficaria tentado a tratá-los como um caso especial separado:
fonte
Tente isto
Isso obterá uma lista de todos os arquivos que terminam em PHP e, em seguida, passa por ele. ecoando o nome do arquivo e, em seguida, imprimindo a primeira linha do arquivo. Acabei de inserir
lhe dará uma saída como:
então você pode colocar um grep normal no final para se livrar do que deseja ver e encontrar apenas exceções
resultado:
fonte
for x in *.php;do echo $x \"
head -n1 $ x\";done
Bash 4.0
fonte
deve fazer o que você está pedindo.
fonte
cat
uso compulsivohead -1 file.txt | grep "^<?"
é suficiente.command
levará o arquivo como argumento. Pode não ser estritamente necessário, mas eu não estou levando-o para fora :)esta:
dá a você algo como isto:
todo arquivo que não contenha seu padrão será "marcado" com "1". você pode brincar com isso até que atenda às suas necessidades.
fonte
head -1 "$i" | grep '^<?' || echo "$i"
que só imprimirá o nome do arquivo se for problemático.Deixe-me tentar
ninguém disse que o wak não estava disponível :-)
fonte