получение заголовков / блоки комментария

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

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

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

Я имею прочитайте руководство и пытался гуглить, также нашел некоторые подсказки, но недостаточно запустить меня.

Спасибо!

1
задан 29.07.2015, 23:57

4 ответа

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

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

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

2
ответ дан 12.12.2019, 10:50
  • 1
    @AnC, я думаю, что существует проблема в моем решении также. Это не останавливается как Richardкоманда после первого соответствия! Так, Вы получите все комментарии, запускающиеся в новых строках (требование 1 не ограничено запуском файла) в файле. – nik 06.09.2009, 19:54
  • 2
    Просто реализованный, что - таким образом, я теперь комбинирую оба из Ваших решений: $LOGFILE кошки | sed-e '/*\//q' | sed-n '/^\\/*/, / *\//p' К сожалению, я не могу правильно поверить Вам обоим. – AnC 06.09.2009, 20:09
  • 3
    @AnC, Вы могли сделать: sed -n '/^\/*/,/*\// p' $LOGFILE | sed -e '/*\//q' и пропустите cat. Но, я еще не доволен этим. – nik 06.09.2009, 20:32

Этот взгляд на каждый файл с расширением .log и если первая строка "/*" только, распечатайте все до строки с "* /" только.

for file in *.log; do
      head -n1 $file | grep  -q '^/*' &&
      sed '/^\*\/$/q' $file; 
done
1
ответ дан 12.12.2019, 10:50
  • 1
    Это делает задание - Спасибо! Один протест: Это не будет работать, если будет что-нибудь выше заголовка, или если там несколько блоки комментария. Однако я не должен волноваться об этом, пока мне на самом деле не нужен он. – AnC 06.09.2009, 19:21
  • 2
    И если не будет никакого заголовка, то это распечатает целый файл! Существует много видов отказа. Возможно, можно ли задать вопрос, "Как я могу распечатать комментарии в файле?" (И давайте использовать awk.) – Richard Hoskins 06.09.2009, 19:28
  • 3
    Вы правы - решение nik кажется немного более безопасным в том отношении, таким образом, я буду использовать это на данный момент. Еще раз спасибо! – AnC 06.09.2009, 19:48
  • 4
    , я обновил свой ответ для избавлений от большинства его худших проблем. – Richard Hoskins 06.09.2009, 22:32
cat *.log | sed -e 's/*\/\*//g' -e 's/\*\///g' >> smt.log

Это могло бы быть этим

0
ответ дан 12.12.2019, 10:50
  • 1
    я боюсь, что только удаляет "* /" строка. Я экспериментировал с подобными выражениями, но не добирался нигде - я думаю, что это - потому что sed продолжает работать линию за линией основание. – AnC 06.09.2009, 19:06

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

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

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

0
ответ дан 12.12.2019, 10:50

Теги

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