URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9505
[ Назад ]

Исходное сообщение
"Помогите устранить ошибку в коде sed"

Отправлено evgen12 , 08-Июл-12 20:40 
Есть скрипт, который должен удалять все комментарии для Си-файла, подаваемого на вход скрипта. Должны обрабатываться комментарии следующих видов:
/* это комментарий, он может быть многострочным  */
// закомментировано до конца строки
Вот скрипт:
#!/bin/bash
##
sed 's/\/\/.*//g' $1|
sed '/\/\*/,/\*\//d'|
sed '/^$/d' >new3.txt
exit 0
А вот ошибка:некорректно обрабатываются однострочные комментарии формата /* */ - вырезаются блоки текста из кода
Помогите исправить пожалуйста)

Содержание

Сообщения в этом обсуждении
"Помогите устранить ошибку в коде sed"
Отправлено Andrey Mitrofanov , 08-Июл-12 21:48 
> Есть скрипт, который должен удалять все комментарии для Си-файла, подаваемого на вход
> Помогите исправить пожалуйста)

А вложенные комментарии -- тоже? И _обязательно на sed-е??

---

$ cat ./xx
1
//2
3
4.1 /* 4 */ 4.2
5.1 /* 5
6 */ 6.1
$ cat ./xx |cpp
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "<stdin>"
1

3
4.1 4.2
5.1 6.1
$ _

Первые 4 строчки отрезать -- см. man tail


"Помогите устранить ошибку в коде sed"
Отправлено DeadLoco , 09-Июл-12 03:03 
> Первые 4 строчки отрезать -- см. man tail

man head


"Помогите устранить ошибку в коде sed"
Отправлено Andrey Mitrofanov , 10-Июл-12 20:48 
>> Первые 4 строчки отрезать -- см. man tail
> man head

Гы-гы. eyes man tail

|tail -n +4


"Помогите устранить ошибку в коде sed"
Отправлено DeadLoco , 11-Июл-12 11:04 
>> man head
> Гы-гы. eyes man tail
> |tail -n +4

ВНЕЗАПНО челу потребуется посих-совместимость и недосуг вникать в диалекты.


"Спасибо Столману за позикс"
Отправлено Andrey Mitrofanov , 11-Июл-12 18:17 
>> |tail -n +4
> ВНЕЗАПНО челу потребуется посих-совместимость

Вы там у ся в позиксах используете го^W head вот _так совместимо?
| tac| head -n -4| tac

Рыдаем над ВНЕЗАПНО тяжёлыми судьбами пионеров-первопроходцев!
| awk 'NR>4'
| sed '1,4d'


"Помогите устранить ошибку в коде sed"
Отправлено LSTemp , 10-Июл-12 20:17 
> Есть скрипт, который должен удалять все комментарии для Си-файла, подаваемого на вход
> скрипта. Должны обрабатываться комментарии следующих видов:
> /* это комментарий, он может быть многострочным  */

sed обрабатывает входной поток данных именно ПОСТРОЧНО. awk Вам в руки для обработки многострочных комментариев - он с БЛОКАМИ входящих данных работать умеет.

>[оверквотинг удален]
> Вот скрипт:
> #!/bin/bash
> ##
> sed 's/\/\/.*//g' $1|
> sed '/\/\*/,/\*\//d'|
> sed '/^$/d' >new3.txt
> exit 0
> А вот ошибка:некорректно обрабатываются однострочные комментарии формата /* */ - вырезаются
> блоки текста из кода
> Помогите исправить пожалуйста)