Отменяяя синтаксис синтаксис, искажающий макросы, чтобы сделать отрывки, способные создавать прототипы тегов

sed -ie '/string1/!b' -e '/string2/d' file.txt

При этом удаляются строки, содержащие как строка1 , так и строка2 независимо от порядка (могут даже перекрываться, как при просмотре для foobar в barbaz в строке, содержащей foobarbaz ).

-i выше является расширением GNU. Другое решение, специфичное для GNU:

awk -i inplace '!(/string1/ && /string2/)' file.txt

Возможно, вы использовали бы perl здесь:

perl -ni -e 'print unless /string1/ && /string2/'
4
18.05.2018, 15:43
2 ответа

Para manejar esa macro en particular, puede usar la opción --regex-<LANG>:

ctags --regex-c='/^[^#]*_EXFUN *\( *([^,]+),.*/\1/p/'...

Lo que genera un archivo tagscon:

_EXFUN  test.c     1;"     d       file:
strchr  test.c     /^char    *_EXFUN(strchr,(const char *, int));$/;"      p
4
27.01.2020, 20:48

Ejecute ectagsen el archivo preprocesado y pídale que mire los comentarios del preprocesador(--line-directives=yes)y que escriba números de línea en el archivo tags(-no--excmd=numbers).

cc -E prog.c >prog.p
ectags --line-directives=yes --language-force=c --c-kinds=p -n prog.p

Archivo C de muestra:

#define _EXFUN(name, proto)     name proto

char    *_EXFUN(strchr,(const char *, int));

Archivo resultante tags:

!_TAG_FILE_FORMAT       2       /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED       1       /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR    Darren Hiebert  /dhiebert@users.sourceforge.net/
!_TAG_PROGRAM_NAME      Exuberant Ctags //
!_TAG_PROGRAM_URL       http://ctags.sourceforge.net    /official site/
!_TAG_PROGRAM_VERSION   5.8     //
strchr  prog.c  3;"     p       file:

Como puede ver, el prototipo de strchraparece en la línea 3 en prog.c.

La desventaja de esto es que no obtiene entradas de etiquetas para preprocesar macros.

Puede resolver eso ejecutando ectagsen los archivos originales y preprocesados ​​aunque:

ectags --line-directives=yes --language-force=c --c-kinds=pd -n -I _EXFUN prog.p prog.c

que produce

[...]
_EXFUN  prog.c  1;"     d       file:
strchr  prog.c  3;"     p       file:
5
27.01.2020, 20:48

Теги

Похожие вопросы