LINUX.ORG.RU

[shell] Разбор поз. параметров


0

1

Здравствуйте. Помогите пожалуйста с задачей. Пользователь вводит два параметра. С их помощью нужно заменить все вхождения первого параметра в файле на второй. Проблема в том, что пользователь будет вводить именно то, что он хочет найти. Т.е. в лоб подставить поз. параметры никак - если использовать sed, то любой ввод в виде слешей и других неэкранированных команд из синтаксиса седа вгонит его в ступор. Моя задача, насколько я понимаю, правильно экранировать все «седоопасные» символы с помощью стандартных средств. Или я вообще все не так понял? Задача:

Необходимо написать сценарий shell replace.sh, позволяющий заменить все вхождения заданной строки (далее будем называть ее строкой поиска) другой строкой (далее будем называть ее подстановкой) во всех регулярных файлах некоторого заданного дерева каталогов. Строка поиска, подстановка и путь к корню дерева каталогов задаются параметрами командной строки. Строка поиска и подстановка могут содержать любые символы, за исключением символа перевода строки и одинарной кавычки.

Синтаксис вызова сценария: replace.sh [ -d путь ] 'строка поиска' 'подстановка'. Если путь опущен, корнем дерева полагается текущий каталог. Сам сценарий, если даже попадает в дерево, не обрабатывается.

Наиболее жесткое ограничение заключается в «необучаемости» пользователя. Это означает, что строка в одинарных кавычках представляет собой именно то, что предполагает найти/заменить пользователь, или, другими словами, заставить пользователя внедрять в строку дополнительные символы или каким-то образом модифицировать ее содержимое, чтобы обеспечить работоспособность сценария, нельзя.

awk '{gsub("one", "two", $0); print > FILENAME}' ./*
fluorite ★★★★★ ()

>Моя задача, насколько я понимаю, правильно экранировать все «седоопасные» символы с помощью стандартных средств.

С помощью седа и проэкранируй.

Yareg ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.