Удалите все линии, за исключением соответствия шаблонной линии наилучшей практике (sed) - PullRequest
16 голосов
/ 07 мая 2011

Я хочу удалить все строки, кроме строк, содержащих соответствующий шаблон.

Вот как я это сделал:

sed -n 's/matchingpattern/matchingpattern/p' file.txt

Но мне просто любопытно, потому что я переименовываюсопоставление шаблона с соответствующим шаблоном.Похоже, это пустая трата времени.

Есть ли лучший способ сделать это?

Ответы [ 4 ]

49 голосов
/ 07 мая 2011
sed '/pattern/!d' file.txt

Но вы заново изобретаете grep здесь.

2 голосов
/ 29 января 2014

grep, конечно, лучше ... потому что он намного быстрее.

например. используя grep для извлечения всех данных последовательности генома хромосомы 6 в наборе данных, с которым я работаю:

$ time grep chr6 seq_file.in > temp.out

real    0m11.902s
user    0m9.564s
sys 0m1.912s

по сравнению с седом:

$ time sed '/chr6/!d' seq_file.in > temp.out

real    0m21.217s
user    0m18.920s
sys 0m1.860s

Я повторял это 3X и ~ одинаковые значения каждый раз.

2 голосов
/ 25 июля 2012

Вместо использования sed, что сложно, используйте grep.

grep matching_pattern file

Это должно дать вам желаемый результат.

2 голосов
/ 22 января 2012

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

sed -n '/matchingpattern/p' file.txt

/.../ - это адрес, к которому могут быть прикреплены действия в этом случае p.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...