2013-09-15 2 views
2

У меня есть * .dot файл, например:найти текст по Grep и заменить путь, что с СЭД

... 
0 -> 1 [color=black]; 
1 -> 2 [color=blue]; 
1 -> 3 [color=blue]; 
2 -> 4 [color=gold3]; 
.. 

мне нужно изменить «цвет» из линий, начал с $ число. Я могу легко получить =blue используя

a="1" 
cat experimental.dot | grep "^$a\ ->" | grep -o =[a-Z0-9]* 

Но я не могу изменить =blue к =red в файле с использованием СЭД.

+0

FYI, '[Az, 0-9] 'не делает того, что, по вашему мнению, делает. В частности, он будет соответствовать запятой в тексте. – Kevin

+0

Спасибо за это замечание. –

ответ

3
a=1 
sed "/^$a /s/\\(color=\\)[[:alnum:]]\\+/\\1red/" <<END 
0 -> 1 [color=black]; 
1 -> 2 [color=blue]; 
1 -> 3 [color=blue]; 
2 -> 4 [color=gold3]; 
END 
0 -> 1 [color=black]; 
1 -> 2 [color=red]; 
1 -> 3 [color=red]; 
2 -> 4 [color=gold3]; 

Для всех строк, начинающихся с переменным значением (добавив пространство так, вы не подходите «10» или «11») изменить слово следующего «цвета =» красный.

+0

sed -i "/^$ id/s/\\ (color = \\) [[: alnum:]] \\ +/color = $ 2 /" experimental.dot Я остановился на этом варианте, спасибо. –

2

Это, вероятно, должно быть так:

a="1" 
sed "/^$a ->/s/=blue/=red/" experimental.dot 

Выход:

0 -> 1 [color=black]; 
1 -> 2 [color=red]; 
1 -> 3 [color=red]; 
2 -> 4 [color=gold3]; 

Если вы хотите изменить файл, используйте -i:

sed -i "/^$a ->/s/=blue/=red/" experimental.dot 
+0

Да, это хорошо работает. –

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