2013-10-15 3 views
1

Я уверен, что это было написано где-то раньше ... Я пытаюсь использовать sed для замены строки со следующим форматом, который находится в большей строке:Как использовать sed для замены строки в более крупной строке

EFF=<some text>; 

Строка всегда начинается с 'EFF =' и заканчивается символом ';'

Я пробовал следующее, но как-то он удаляет гораздо больше, чем предполагалось (вместо того, чтобы просто удалять этот конкретный раздел, он удаляется до финала ';' в более крупной строке), поэтому я не уверен могу ли я быть более конкретным в моей команде:

sed -i 's/EFF=.*;//g' 

например, из большей строки:

<some text>;EFF=<some text>;<some text>;<some text>; 

"некоторый текст" не тождественна

ответ

4

* жадный, он соответствует самой длинной строке. Вы должны исключить ; из матча.

sed -i 's/EFF=[^;]*;//g' filename 
+0

Это трюк ... могу ли я спросить, что означает [^;] в этом контексте? – user2726449

+0

Перейдите в обычный-expressions.info, чтобы узнать о регулярных выражениях. – Barmar

+0

'[^;]' означает каждый символ, который не является; – Jotne

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