Шаблон сопоставления, включая новую строку, с OS X (BSD) sed

Я хочу сопоставить следующие шаблоны, используя sed в OSX:

test = {

и

test =
{

Я пробовал много разных вещей, включая строку ниже, но не могу понять, почему она не работает:

sed -n -E -e "s/(^[a-zA-Z_]*[ ]*=[ "'\'$'\n'"]*{.*)/var \1/p" $path

Я использовал extquote $'\n' для соответствия новой строке и поставил перед ним обратную косую черту, когда читал много сообщений в Интернете. Если я не использую какие-либо ( или [ группы, это работает, но я хочу использовать группы. Я продолжаю получать следующую ошибку:

sed: 1: "s/(^[a-zA-Z_]*[ ]*=[ \
 ...": unbalanced brackets ([])

Может кто-нибудь мне помочь? Я совсем впадаю в отчаяние.


person Pieter-Jan    schedule 15.07.2015    source источник
comment
Sed читает строку, разделенную переводами строк, вы должны явно получить следующую строку, чтобы выполнить замену.   -  person 123    schedule 15.07.2015


Ответы (1)


Это должно работать в зависимости от того, какими могут быть ваши точные данные.

sed '/[[:alpha:]]* =/{/ *{/!N;//s/^/var /;}' file

Вход

test = {
blah
test =
{
wut

Выход

var test = {
blah
var test =
{
wut
person 123    schedule 15.07.2015
comment
Спасибо. Я получаю много совпадений с этим шаблоном (намного больше, чем я хочу, но, возможно, я могу это настроить), но новая строка все еще не соответствует... возможно, это невозможно с этой версией sed - person Pieter-Jan; 15.07.2015
comment
Что вы имеете в виду, что новая строка не соответствует? Какая у вас проблема, работает ли это на примере ввода, который я предоставил, если да, можете ли вы дать мне какой-нибудь, на котором он не работает? - person 123; 15.07.2015
comment
@Pieter-Jan Попробуйте сейчас, потому что я оставил пробел в конце регулярного выражения. - person 123; 15.07.2015
comment
в порядке! это идеально! вы только что потеряли мой ^ в начале, но теперь я получаю большинство совпадений, которые хочу (за исключением того, что он также соответствует таким вещам, как test = function () { чего я не хочу). Большое спасибо! Я еще не очень понимаю команду, но я попробую... - person Pieter-Jan; 15.07.2015