Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2016, 22:31   #1
АннаАннаАнн
Новичок
Джуниор
 
Регистрация: 28.10.2016
Сообщений: 2
По умолчанию Сценарий bash

Задание: Сценарий заменяет в тексте программы на Pascal, подаваемой на стандартный ввод, все комментарии типа "(* comment *)" на комментарии типа "{comment}" (с учетом многострочных комментариев). Результат выдается на стандартный вывод.
Пример:
$ cat myprog.pas
program example;
begin (* aaaa *)
end.
$ ./myscript.sh <myprog.pas
program example;
begin {aaaa}
end.

Я написала это следующим образом:
#!/bin/bash
grep '(* *)' *.pas|while read line;
do;
echo $line "(* *)"|tr '{* *}';
done
Но не работает, подскажите пожалуйста, что не так.
АннаАннаАнн вне форума Ответить с цитированием
Старый 30.10.2016, 04:39   #2
predefined
Форумчанин
 
Регистрация: 01.08.2016
Сообщений: 182
По умолчанию

У grep несколько специфические выражения регулярок, хотя в вашем случае - всё прозаичнее:

* - одно или несколько вхождений предыдущего символа. Если вы хотите искать саму * её надо экранировать \*
() - это спецсимволы группировки, их тоже надо экранировать как \( \)

Попробуйте: grep -E '\(\*.*\*\)' *.pas

Я не знаю что там у grep с "жадностью" поиска, потому, что "жадный" поиск отловит всю строку от первой (* и до последней *) если их там несколько:
(* привет *) ещё одно вхождение *) и наконец *)

В обычных регулярках "жадность" отменяется по ?
grep -E '\(\*.*?\*\)'

.*? - любое количество (ибо *) любых символов (ибо .) а ? - вернуть самую короткую строку попавшую под шаблон.
Ключ - расширенный синтаксис регулярных выражений, без него кое-что не будет работать, например, группирующие скобки ()


И регулярка grep -E '\(\*.*\*\)' *.pas только найдёт и распечатает строки с комментариями. Далее вам надо сделать замену их на {comment}.

PS: У вас - многострочные комментарии, поэтому читать построчно - не правильно. По-моему, grep читает файл только построчно, так что придётся "выкрутасничать"для многострочных комментариев.
Вам точно с помощью grep надо? поскольку тут sed больше подходит - он сразу найдёт и заменит. А grep - только ищет и выводит строки, попавшие под заданный шаблон.

Последний раз редактировалось predefined; 30.10.2016 в 05:40.
predefined вне форума Ответить с цитированием
Старый 30.10.2016, 13:47   #3
АннаАннаАнн
Новичок
Джуниор
 
Регистрация: 28.10.2016
Сообщений: 2
По умолчанию

Не обязательно использовать grep. Если применить sed, то так будет?
sed 's/\x22(* *)\x22\x2C/\x22{ }\x22\x2C/g'
АннаАннаАнн вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сценарий с крымом western_digital Свободное общение 141 13.03.2014 08:56
сценарий входа demontools Помощь студентам 10 24.12.2011 01:11
Написать простой сценарий на JS elris Фриланс 4 05.10.2011 17:52
сценарий на php kettyrus Помощь студентам 0 03.11.2009 11:36