Проблемы с седом в Ruby - PullRequest
       5

Проблемы с седом в Ruby

1 голос
/ 13 декабря 2011

Я пытаюсь обновить генератор сайта на работе.Одна из вещей, которую необходимо сделать, - это отредактировать файл gitosis.conf, чтобы добавить репо в нужную группу.Вот как этот блок сейчас настроен в моем файле gitosis.conf.

[group sites]
writable = site1 site2 site3 randomsite awesomeness
members = @devs

Итак, после бесчисленных попыток я сделал несколько «улучшений», а затем несколько шагов назад.

sed -i"" -e"/sites/,\$s/writable.*/& PROJECTNAME/" gitosis.conf

Я наконец-то смог заставить код работать в командной строке CentOS, но теперь, если я попытаюсь запустить его в irb (запускать его в сценарии ruby ​​с обратными галочками, так что это должно сработать) Я получаю эту ошибку:

sed: -e выражение # 1, символ 22: неизвестная команда: `& '=>" "

" символ 22 "можетбыть неверным, потому что я немного отредактировал некоторые слова, чтобы сделать пример более ванильным.

Это то, что на самом деле в сценарии ruby.

gitosis = `sed -i"" -e"/sites/,\$s/writable.*/& PROJECTNAME/" gitosis.conf`

Я искал повсюду, чтобы попытаться это исправить, но пока ничего не придумал.Я читал в разных местах, что лучшим вариантом является ruby ​​-pe, чтобы сохранить его в ruby, но я даже не знаю, с чего начать.Любой совет / вклад был бы потрясающим.Спасибо!

Ответы [ 3 ]

0 голосов
/ 13 декабря 2011

Ну, вам не нужно экранировать переменную $. Попробуйте использовать это -

Гитоз = sed -i"" -e "/70/,/$/s/75/& #{p}/" gitosis.conf

OR

Гитоз = sed -i"" -e "/70/,$ s/75/& #{p}/" gitosis.conf

Хотя я не слишком уверен, что вы планируете делать с переменной, которой вы присваиваете эту sed one-liner. Поскольку это in-line substitution, вы получите переменную, в которой ничего нет.

0 голосов
/ 13 декабря 2011

Это непроверенный код, написанный на лету, но он должен помочь вам начать использовать чисто Ruby-решение:

# [group sites]
# writable = site1 site2 site3 randomsite awesomeness
# members = @devs

FILENAME = 'gitosis.conf'

# bail if the group is missing from the command line
abort('Missing group to add') if (ARGV.empty?)

# read the file
contents = File.read(FILENAME)

# find and extract the "writable" line
writable = contents[/^writable.+$/]

# open the new file. This will automagically close it when done.
File.open("#{FILENAME}.new", 'w') do |fo|
  # output the current file, replacing the current writable line with one containing the old
  # contents with the added new group followed by a line-ending.
  fo.print contents.sub(writable, writable + ' ' + ARGV.shift + "\n")
end

# add code here to handle moving/deleting/something with the old file and
# moving the new file into place.
0 голосов
/ 13 декабря 2011

Ну, вы можете сделать это с помощью sed, если вы не можете сделать это по-другому, вы всегда можете обойтись без &, например:

gitosis = `sed -i"" -e"/plexus/,\$s/\(writable.*\)/\1 #{projectname}/" gitosis.conf`

Но с ruby вы можете парсинг и запись .ini файлов, и ваш скрипт ruby ​​будет работать без sed!

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