Не печатает только совпадающее слово

Я бы установил систему контроля версий. Например, используя mercurial, hg init в каталоге, где хранятся файлы. Затем один раз в день (вероятно, как задание cron сразу после размещения туда новых файлов), hg addremove и hg commit .

Затем, чтобы запустить отчет, вы можете перебрать каждый файл ( для имени файла в dropzone / *; do ) и получить метку времени, с которой он был последний раз зафиксирован, например hg log -l 1 --template "{date (date, '% s')} \ n" "$ filename" . % s предоставит вам временную метку в секундах UNIX; вы можете получить текущее значение с помощью $ (date +% s) , вычесть и приблизительно преобразовать это значение в дни.

Любая VCS ( svn , git и т. Д.) Будет работать для вас точно так же, поэтому просто используйте то, что вам удобно.

1
21.04.2017, 12:33
3 ответа

Почему awk? для этого? grep -EPo '[^\s]+\.h[\s]' /path/to/src/*.cpp >> Makefile должно помочь.

1
27.01.2020, 23:24

Опубликованный (и принятый в настоящее время) ответ grep имеет ряд проблем, не последней из которых является любая строка, которая содержит последовательность .h будет напечатана, а не только те, которые совпадают в регулярном выражении в сценарии Awk (например, из ссылки на член структуры, такой как connectedlist.head ). Я бы использовал для этого sed :

sed -n 's/^"\(.*h\)"$/\1/p "$file" >> Makefile

У меня есть сильное подозрение, что OP не на самом деле хочет сопоставить любую строку, которая заканчивается буквой h в двойных кавычках, что и делает это регулярное выражение. Возможно, более разумным предположением было бы что-то вроде

sed -n 's/^ *# *include  *"\([^"]*\.h\)".*$/\1/p < "$file" >> Makefile

#include с необязательным пробелом, прежде чем оно станет обоснованным. Суть здесь - регулярное выражение [^ "] * \. H , которое захватывает строку, не содержащую двойных кавычек и оканчивающуюся буквенными символами .h .

2
27.01.2020, 23:24

С помощью awk вы можете использовать:

awk -F '"' '
  /^[[:blank:]]*#[[:blank:]]*include[[:blank:]]+".*\.h"/ {
    print $2
  }'

Мы устанавливаем разделитель полей на ", ищем строки, которые выглядят как

#include "something.h"

И из них извлекаем второе поле (то, что находится между первым и вторым ").

0
27.01.2020, 23:24

Теги

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