Используя sed, удалите из определенной строки до первого совпадения (не включено) - PullRequest
0 голосов
/ 11 октября 2018

У меня есть некоторые данные, похожие на

1:Alice 2313
2:Desctop 456
3:Cook 111
4:.filename 50
...
...
100:Good 3
Dir num:10
File num:90
...
...

Я хочу удалить все строки из конкретной строки (например, строка 3), пока не появится строка «Dir num:».Вывод идеи должен быть (согласно приведенному выше примеру):

1:Alice 2313
2:Desctop 456
Dir num:10
File num:90
...
...

У меня есть несколько решений Google, таких как sed -i '/somestring/,$!d' file.Но эти решения не подходят из-за конкретной строки, где удаление начинается.

Как я могу сделать это в 1 команде без какого-либо файла TMP?Прости мой плохой английский, я не являюсь носителем английского языка.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Используйте параметр range: /pattern1/,/pattern2/ sed

$ sed -e '/2:Desctop 456/,/Dir num:10/{//!d}' inputFile
1:Alice 2313
2:Desctop 456
Dir num:10
File num:90
...
...
0 голосов
/ 11 октября 2018

Вам необходимо указать диапазон адресов от указанного номера строки (3) до строки, соответствующей шаблону (/Dir num/).Однако это не так просто, как

sed '3,/Dir num/ d' file

, потому что это удалит строку "Dir num".Попробуйте вместо этого:

sed '3,/Dir num/ {/Dir num/! d}' file

Для линий в диапазоне, убедитесь, что строка не соответствует шаблону: шаблон не соответствует , удали его.

...