2013-07-30 3 views
0

Я пишу скрипт bash для замены шаблона в строке, содержащей пробел. Текст выглядит так: property name = "abcd" value = "1234", а значение изменяется несколько раз в файле, таком как value = 3456 и value = 3689. Только строка, содержащая имя = «abcd» и значение = что-то должно быть заменено.Сравнение пробелов с использованием sed

Есть еще один экземпляр, где abcd и значение называются отдельно, которые НЕ должны быть заменены.

Я хочу совместить оба критерия name = "abcd" и значение перед выполнением замены. Что-то вроде

sed -i '/name="abcd" value=/c\property name="abcd" value="set"' filename 

Как решить эти пробела между «ABCD» и значением, так что СЭД может распознать его как одну строку?

Вход:

`property name="abcd" value="1234"` 
`property name="abcd" value="73845"` 
`property name="abcd" value="8276"` 
`property name="qwerty" value="1234"` 
`blah blah ${abcd} blah` 

Желаемый результат:

`property name="abcd" value="set"` 
`property name="abcd" value="set"` 
`property name="abcd" value="set"` 
`property name="qwerty" value="1234"` 
`blah blah ${abcd} blah` 
+0

Другими словами, вы хотите заменить '1234' и других по' blank'? –

+1

Я действительно не понимаю ваш вопрос, но вы должны * вероятно, использовать XML-парсер. , , – ruakh

+0

Да, замените значение строкой Blank для всех экземпляров, соответствующих критериям – Rahul

ответ

0

Если я правильно понимаю, у вас есть имя = значение "бла" = "бла" на раздельных линий, и просто хотите удалить \ п

sed ':a;N;$!ba;s/\n/ /g' 

будет делать то, что вы хотите взяты из How can I replace a newline (\n) using sed?

+0

Нет, значение отличается от каждой строки. Я хочу, чтобы его заменили строкой «бла», – Rahul

0

После нескольких проб и ошибок, я ударил по решению

`sed -i "/V.prop.*value=/c\ <property name=\\\"V.prop\\\" value=\\\"set\\\"/>" filename` 

. * Заполняет между двумя поисковыми узорами в одной и той же линии. \\ используется для выхода из двойных кавычек.

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