1

У меня есть несколько файлов журнала, которые выглядят так:

/*
header
arbitrary number of lines
*/
blah blah
blah blah

Используя простые команды Bash (желательно sed, а не awk), как мне получить только строки заголовка (в идеале включая маркеры комментариев)?

У меня был RTFM и я попробовал поискать в Google, также нашел несколько подсказок, но их недостаточно, чтобы начать.

Спасибо!

4 ответа4

2

Если вы подтвердите следующее, сценарий в этом ответе будет работать для вас.

  1. Файлы начинаются с символов " /* "
    • Может быть многострочный блок комментариев C-Syntex, который не является вложенным
    • Блок комментариев заканчивается без дополнительных C-операторов на той же строке
sed -n '/^\/\*/,/\*\// p' file.c
#        - - -    - - 

Это будет соответствовать всем строкам от начала файла до конца блока комментария.
Вторая строка (с « # » в начале) выделяет искомое совпадение.
« -n » в начале и « p » в конце говорят sed печатать только соответствующую часть.

1

При этом просматриваются все файлы с расширением .log, и, если первая строка содержит только «/*», выведите все до строки, содержащей только «*/».

for file in *.log; do
      head -n1 $file | grep  -q '^/*' &&
      sed '/^\*\/$/q' $file; 
done
0
cat *.log | sed -e 's/*\/\*//g' -e 's/\*\///g' >> smt.log

Это может быть

0

В случае, если вы, как и я, наткнулись на этот вопрос, пытаясь получить комментарии в стиле Doxygen, команда sed:

sed -n '/^\/\*/p; /^ \*/p' < file

Для более подробного объяснения я написал об этом в блоге .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .