Скрипт Bash для извлечения x количества начальных строк комментариев в другой файл - PullRequest
2 голосов
/ 17 апреля 2010

Я ищу один вкладыш, чтобы вытащить первый блок комментария в любом файле. Блоки комментариев выглядят так:

/*
 * This is a 
 * comment block
 */

Я пытался играть с sed, но просто не могу заставить его работать правильно. Помощь

Ответы [ 3 ]

3 голосов
/ 17 апреля 2010
$ cat file
one two
// comment.....
/*
 * This is a
 * comment block
 */
# asdgihj
/* adsjf */

$ awk -v RS="*/" -vFS="/[*]" 'NR==1{print "/*"$2RT}' file
/*
 * This is a
 * comment block
 */

$ cat file
/* * comment */
/*
 * This is a
 * comment block
 */
/* adsjf */
$ awk -v RS="*/" -vFS="/[*]" 'NR==1{print "/*"$2RT}' file
/* * comment */

Другой способ без использования gawk RS

$ cat file
dsfsd
/*
 * This is a
 * comment block
 */ sdff
blasdf
/* adsjf */

$ awk '/\/\*/&&/\*\//{print;exit}f&&/\*\//{print "*/";exit}/\/\*/&&!/\*\//{f=1}f' file
/*
 * This is a
 * comment block
*/
3 голосов
/ 17 апреля 2010
sed -n '/^\/\*/,/^ \*\//p;/^ \*\//q' file

Или эквивалентно:

sed -n '\|^/\*|,\|^ \*/|p;\|^ \*/|q' file

Edit:

Ниже приведена вторая версия, описывающая ситуацию, упомянутую в комментарии ghostdog74 :

sed -n '\|^/\*.*\*/|{p;q};\|^/\*|,\|^ \*/|p;\|^ \*/|q' file

А если вы хотите обработать пробелы в начале и конце строк:

sed -n '\|^[[:space:]]*/\*.*\*/|{p;q};\|^[[:space:]]*/\*|,\|^ \*/|p;\|^[[:space:]]*\*/|q'
1 голос
/ 17 апреля 2010

Я знаю, что это не совсем то, что вы спрашиваете, но смехотворно легко сделать это с помощью небольшого кода на Python:

#!/usr/bin/env python
import sys

f = open(sys.argv[1])

incomment = False
for line in f:
  line = line.rstrip("\n")
  if "*/" in line:
    print line
    break
  elif "/*" in line:
    incomment = True
    print line
  elif incomment:
    print line

Для запуска:

python code.py <filename>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...