2

Я пытаюсь использовать sed (4.2.2-4+b1 debian 8 (jessie)) для замены текста в нескольких файлах.

Чтобы перейти от этого:

$var1 = array(foo=>"bar",bar=>"foo");
$var2 = array( foo=>"bar", bar=>"foo" );
$var1 = array(
    foo=>"bar",
    bar=>"foo"
);

Чтобы получить это:

$var1 = array( "foo" => "bar","bar" => "foo");
$var2 = array( "foo" => "bar", "bar" => "foo" );
$var1 = array(
    "foo" => "bar",
    "bar" => "foo"
);

Нормальное регулярное выражение будет:

/(\(|\(\s|,|,\s.+?)([a-z|A-Z].+?)=>/$1"$2" => /g

Использование sed вроде этого не работает, хотя

sed -i "s#\((\|(\s\|,\|,\s.+?\)\([a-zA-z].+?\)=>#\1\"\2\" => #g" *.php

Или же:

sed -i "s#\((\|(\s\|,\|,\s.+?\)\([a-z\|A-z].+?\)=>#\1\"\2\" => #g" *.php

Кто-нибудь знает, что я делаю не так?

1 ответ1

1
sed -r 's/([^"])([[:alpha:]_][[:alnum:]_]*)[[:blank:]]*=>/\1"\2" => /g'

найдите символ без кавычек, за которым следует ключ хеша, затем необязательный пробел, за которым следует => , и вставьте кавычки вокруг ключа.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .