Estou escrevendo um script, quero verificar se a primeira linha do arquivo corresponde a um determinado padrão e se o imprime. Como posso conseguir isso?
Como verifico o padrão? Existe uma maneira de verificar o padrão e com base na saída fazer alguma coisa ..
Edição: Por favor, dê uma olhada nesta pergunta: /programming/5536018/how-to-get-match-regex-pattern-using-awk-from-file
Eu quero algo assim, mas nenhum deles funcionou para mim. Basicamente, quero verificar se a primeira linha corresponde a um padrão regex ou não e, com base nisso, imprima as linhas do arquivo.
Respostas:
Você poderia fazer isso com
ed
:o truque aqui é tentar substituir
PATTERN
on-1st
line consigo mesmo.ed
ocorrerá um erro se não conseguir encontrar o padrão especificado, portanto,,p
(imprimir o arquivo inteiro) será executado apenas se1s/PATTERN/&/
for bem-sucedido.Ou com
sed
:isso
q
ocorre se a primeira linha não (!
) corresponderPATTERN
, caso contrário,p
todas as linhas serão delimitadas.Ou, como apontado por Toby Speight , com o GNU
sed
:Q
é o mesmo queq
mas não imprime o espaço do padrão.fonte
Q
vez deq
usar o GNU sed, oud
antesq
(portátil) para não exigir o-n
sinalizador e op
comando:sed '1{/PATTERN/!Q}' infile
oused -e '1{' -e '/PATTERN/!{' -e 'd' -e 'q' -e '}' -e '}' infile
, respectivamente.d
reinicia o ciclo de comando Isso sempre me chama a atenção! : - |sed
o primeirosed
comando reclamased: -e expression #1, char 10: extra characters after command
(por causa dop
), mas ased
últimassed
sugestões funcionam bem.sed -n '1{/PATTERN/!q};p'
Com o baú de ferramentas POSIX:
fonte
imprimiria o nome dos
txt
arquivos não ocultos no diretório atual cuja primeira linha corresponde à expressão regular estendidapattern
com asawk
implementações suportadasnextfile
.Se, em vez de imprimir o nome do arquivo, desejar imprimir todo o conteúdo do arquivo, você poderá:
É eficiente, pois executa apenas um comando, mas
awk
não sendo o comando mais eficiente para despejar o conteúdo de um arquivo, com arquivos grandes, é possível obter melhores desempenhos fazendo algo como:Ou seja, use apenas
awk
para imprimir a lista de arquivos que correspondem (delimitados por 0) e dependemcat
para despejar seu conteúdo.fonte
Se você está escrevendo um script de shell, pode fazer algo como
Ou, em Perl:
fonte
close ARGV
seja mais idioma do que atribuir$.
.Oldschool, apenas traduza sua frase em comandos padrão:
Para aprender bash, é um bom começo. Se você só precisa de uma solução rápida, tente as respostas sed, awk ou perl. Ambos são legais, mas são idiomas próprios que você precisa (e provavelmente quer) para aprender.
É um exemplo bastante simples, portanto, se você quiser saber mais, também pode tentar o mesmo em ruby, php, js (por exemplo, em nodejs) ou em qualquer outro idioma que permita o acesso a arquivos. Mesmo C / C ++ ou Java deve ser fácil de gerenciar com uma pequena tarefa.
fonte
if/else
vez de[ ] &&
.