2015-06-02 5 views
-1

У меня есть файл, как это:Мульти замена линии с Sed

function a() { 
    doSomething(); 
    doSomethingElse(); 
} 

Теперь мне нужно заменить весь текст между function a() { и } с каким-либо другим текстом

Я попытался несколько способов найти здесь, но они все провалилось. Надеюсь, я смогу получить объяснение вместе с ответом.

P.S. трюк должен быть совместим как с OS X, так и с GNU Sed.

+0

является 'йоЗотеЬЫпд()' в настоящее время в одной строке? –

+0

Покажите нам свою попытку, результат и ожидаемый результат. – randomusername

+3

sed всегда является неправильным инструментом для любой работы, которая включает в себя работу на нескольких строках одновременно. Если 'sed 's/doSomething()/foobar /' file' не все, что вам нужно, отредактируйте свой вопрос, чтобы уточнить ваши требования и обеспечить лучший ввод проб и ожидаемый результат. –

ответ

0

Вы можете сделать стандартную замену:

sed -i 's/\(\<\)doSomething()/\1somethingElse()/' your_file 

Мы используем границу слова, чтобы разграничить вашу строку:

\(\<\)doSomething() 

И тогда мы заменить эту строку с вашей новой строкой (в том числе захваченного слова граница):

\1somethingElse() 

флаг -i расшифровывается как: рядный замена


Я использовал этот пример файла:

function a() { 
    doSomething(); 
doSomething(); 
    foo();doSomething(); 
} 

Выход:

function a() { 
    somethingElse(); 
somethingElse(); 
    foo();somethingElse(); 
} 
0
sed '/^function a() {/,/}/{ 
    /^[[:blank:]]*doSomething();/ c\ 
Replace with\ 
whaterver you want \ 
where new line are backslash \ 
at the end for multiline. 
    }' YourFile 
  • заменить линию doSomething внутри функции а() пункта по какой-либо другой линии (ы)
  • сильно зависит от содержания функции а() (при условии, что нет окончания } линии внутри функции)
+0

Спасибо, но часть 'c \' работает только в GNU Sed. – fish748

+0

'c \' (с обратной косой чертой) совместим с posix, 'c' является только GNU sed. Если это не удается, вы все равно можете использовать временный файл и 'r'action. – NeronLeVelu

Смежные вопросы