Как избавиться от разделителя строк "-" при использовании grep с контекстными строками? - PullRequest
52 голосов
/ 30 января 2010

У меня есть текстовый файл с именем compare.txt, который я хочу извлечь из одной строки, которая следует за каждой строкой, содержащей шаблон «nmse_gain_constant». Следующая команда приближает меня:

grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant

Но это включает разделительную строку "-" между каждой строкой желаемого текста. Любые простые идеи, как избавиться от "-" линий?

Я бы привел вам пример текста здесь, но символы "-" ошибочно интерпретируются этим постом как контрольные символы, и то, что вы увидите, неверно.

Ответы [ 5 ]

79 голосов
/ 12 января 2012

Я делаю это:

 grep ... | grep -v -- "^--$"

Но это тоже работает!

grep --no-group-separator ...

И это не выплевывает это "-" или даже пустую строку.

23 голосов
/ 06 июля 2011

Существует недокументированный параметр grep: "--group-separator", который переопределяет значение по умолчанию "-". Вы можете установить его на "", чтобы избавиться от двойной черты. Тем не менее, вы все еще получаете пустую строку. У меня была такая же проблема, и я нашел этот параметр, прочитав исходный код grep.

20 голосов
/ 30 января 2010

Хорошо, переключатель A по умолчанию добавит эти символы, так что это не загадка.

man grep состояния:

-A NUM

    Places  a  line  containing  a  group  separator  (--)   between
    contiguous  groups  of  matches.  With the -o or --only-matching
    option, this has no effect and a warning is given.

Но вы можете использовать простой sed для очистки результата:

yourgrep | sed '/^--$/d'
7 голосов
/ 31 января 2010

Если вы используете AWK:

нет необходимости передавать по конвейеру так много greps или использовать другие инструменты (например, sed):
awk '/nmse_gain_constant/{getline;print }' compare.txt
3 голосов
/ 30 января 2010

Одно решение будет:

grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant  | grep -v "\-\-"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...