2013-02-25 5 views
2

Учитывая следующий файлУдалить первую часть строки

$ cat a.txt 
The quick brown fox jumps over the lazy dog 

можно легко удалить первую часть с помощью sed

$ sed 's/.*fox//' a.txt 
jumps over the lazy dog 

Я пытался быть умным с D опцией

D  Delete up to the first embedded newline in the pattern space. 

пример

$ sed 's/fox/\n/; D' a.txt 

Однако это не дает выхода. Можно ли удалить первую часть строки с помощью sed с использованием опции D, аналогичной той, что я пробовал?

Это работает, если деталь до fox короче детали после.

$ sed 's/fox/\r/' a.txt 
jumps over the lazy dog 

ответ

2

Это может работать для вас (GNU sed):

sed 's/fox/\n/;T;D' file 
3

Один из способов ему:

sed '/fox/{s/fox/\n/;D}' input 
1

Вот полный текст справки:

Удалить текст в области шаблона до первого символа новой строки. Если оставлен текст , перезапустите цикл с результирующим пространством шаблонов (без , считывая новую строку ввода), иначе начните нормальный новый цикл.

Ваш пример не работает, потому что D перезапустит цикл и продолжит удаление строк, пока ничего не останется.

Если вы действительно хотите использовать D, ответ perreal был бы сделать, или, возможно, вы предпочли бы использовать условное ветвление (t или GNU только T). Вот совместимая версия GNU и BSD:

parse.sed

s/fox/\ 
/
t del 
b 
:del 
D 

Выполнить это так:

sed -f parse.sed a.txt 

Выход:

jumps over the lazy dog 
Смежные вопросы