Você pode experimentar este comando. Pode precisar de ajustes para o layout específico dos comentários que você quer (contra os que você não quer).
find . -type f -regex ".*\.[fF]\(90\)?" -exec awk '/^[Cc!]\ *program/{f=1} f{if(/^[^Cc!]/) exit; print}' {} \;
Isso localizará todos os arquivos Fortran comumente chamados em sua árvore de diretórios e imprimirá o primeiro bloco de comentários que começa com ! program
, C program
ou c program
e imprime a totalidade desse bloco de comentário e apenas esse bloco de comentário. Eu escolhi esses regexs com base em seus blocos de comentário de amostra.
Se você precisar disso, me avise nos comentários ou podemos configurar uma sala de bate-papo para descobrir isso. Isso deve começar com o que você quer embora. Se os seus comentários nem sempre começarem com program
, pode tentar
find . -type f -regex ".*\.[fF]\(90\)?" -exec awk '/^[Cc!]\ *$/{f=1} f{if(/^[^Cc!]/) exit; print}' {} \;
que, em vez disso, iniciará a partida na primeira linha com apenas um caractere de comentário e, opcionalmente, espaços em branco na linha.
Observação Essas correspondências dependem do caractere de comentário que está na coluna 1. Se você tiver arquivos de forma livre com o bloco de comentários que precisa iniciar em uma coluna diferente (não comum para comentários de nível superior), estes não funcionam.
Como isso funciona:
find . -type f -regex ".*\.[fF]\(90\)?"
pesquisa em seu diretório atual (altere .
para um caminho absoluto para poder executá-lo em qualquer lugar) de forma recursiva para qualquer arquivo chamado *.f
, *.F
, *.f90
ou *.F90
. Em seguida, executa:
awk '/^[Cc!]\ *program/{f=1} f{if(/^[^Cc!]/) exit; print}' {} \;
em cada arquivo encontrado. Vamos dividir isso:
/^[Cc!]\ *program/{f=1}
Isso corresponde à primeira linha que começa com um caractere de comentário C
, c
ou !
, contém qualquer número de espaços e, em seguida, a palavra program
. Isso corresponde à primeira linha real de seus blocos de comentários de amostra. Awk imprime esta linha e continua as linhas de impressão até
if(/^[^Cc!]/) exit;
é correspondido. Isso corresponde à primeira linha subsequente que não inicia com um caractere de comentário. Neste ponto, o awk sai e o próximo arquivo é processado.